本文描述了在开发环境中实现一个功能,该功能允许用户在附件面板控件中上传Java或XML文件,并自动将文件内容显示在代码编辑器控件中。具体步骤包括设置附件面板控件属性、捕获文件上传事件、读取上传的文件内容并显示在代码编辑器中。文中还提供了实现过程的代码示例,包括处理文件上传事件和读取文件内容的函数。此外,还提到了注意事项,如文件持久化、附件信息存储位置、附件面板控件与附件字段的区别,以及如何在文件上传时执行业务逻辑处理的示例代码。最后,还列举了相关的参考资料和学习资源。
关键词:附件面板、代码编辑器
一、需求
用户在附件面板控件中上传java/xml文件后,系统自动读取其中的内容,并显示在代码编辑器中。
二、思路与方案
1. 在设计器中将附件面板控件的“扩展名”属性设置为"java,xml"。
2. 添加一个代码编辑器控件,用于显示上传的文件内容。
3. 捕获附件面板的 afterUpload 事件,读取上传的文件内容,显示在代码编辑器控件中。
三、实现过程
1. 开发页面。
2. 用户在上传文件之后,捕获附件面板的 afterUpload 事件,读取上传文件的内容,然后显示在代码编辑器控件中。
/** * 文件上传时触发,可以在此事件接收已上传到文件服务器的文件相对URL */ @Override public void afterUpload(UploadEvent evt) { List<String> fileUrls = new ArrayList<String>(); for (Object url : evt.getUrls()) { fileUrls.add((String) ((Map<String, Object>) url).get("url")); } // 从临时目录读取已上传文件内容 for (String fileUrl : fileUrls) { String text = this.loadTextFileString(fileUrl); logger.info("读取到上传文件的内容: " + text); CodeEdit codeEdit = getView().getControl(KEY_CODEEDIT); codeEdit.setText(text); } UploadListener.super.afterUpload(evt); } /** * 演示读取上传的文件内容,转为文本输出 * @param fileUrl 已上传到临时目录的文件URL * @return */ private String loadTextFileString(String fileUrl) { TempFileCache tempFileCache = CacheFactory.getCommonCacheFactory().getTempFileCache(); int temp = 0; int len = 0; byte[] bt = null; InputStream inStream = null; try { inStream = tempFileCache.getInputStream(fileUrl); bt = new byte[(int) 1024 * 1024 * 5]; while ((temp = inStream.read()) != -1) { bt[len] = (byte) temp; len++; } } catch (Exception e) { return e.toString(); } finally { try { if (inStream != null) { inStream.close(); } } catch (IOException e) { return e.toString(); } } return new String(bt, 0, len); }
四、效果图
五、开发环境版本
不限
六、注意事项
1. 在附件面板中上传附件之后,首先存放在缓存中,只有在保存/提交单据之后,附件文件才会持久化到附件服务器上。
2. 附件持久化后之后,其数据信息存储在表 T_BAS_ATTACHMENT 中,对应的页面标识为 bos_attachment。
3. 附件面板控件 与 附件字段不一样!
4. 如果要在文件上传时进行业务逻辑处理,需要先监听附件面板控件的文件上传事件,如下所示。
public class AttachmentPanelDemo3 extends AbstractBillPlugIn implements UploadListener { private final static String KEY_ATTACHMENTPANEL = "attachmentpanel"; @Override public void registerListener(EventObject e) { // 侦听附件面板控件的文件上传事件 AttachmentPanel attachmentPanel = getView().getControl(KEY_ATTACHMENTPANEL); attachmentPanel.addUploadListener(this); super.registerListener(e); } /** * 文件上传时触发,可以在此事件取消后续处理 */ @Override public void upload(UploadEvent evt) { UploadListener.super.upload(evt); } }
七、参考资料
复制合同模板(基础资料)上的附件并填充数据后重新绑定到业务单据上
控件(附件面板、附件字段、图片字段、图片控件、图片列表)介绍(视频)
将附件面板控件上传的java文件内容展示到前端界面上的代码编 …(9.37KB)
推荐阅读