我试图在运行客户端(web)的进程上弹出一个文件选择器。但是文件选择器窗口出现在服务器上。这里我们只使用jfilechooser。。。
JFileChooser chooser = new JFileChooser(); chooser.setDialogTitle("Save Log File as"); chooser.setSelectedFile(new File("AttendenceBug.html"));
这项工作是基于adempiere erp,使用zk框架。
kzipqqlq1#
在adempiere中,用户可能使用两个可能的客户端。基于swing的本地客户机运行在用户的pc上,在这种情况下,客户机pc几乎完成了会计和工作流之外的所有工作。这是90年代最流行的传统胖客户机-服务器体系结构。第二个webui使用zk框架,而zk框架又基于ajax。当用户使用此界面时,所有代码都在服务器上运行,而客户端(pc)只处理(web)ui元素。事实上,使用zk框架,服务器也会处理大部分ui,因此用户的pc只呈现结果html。示例代码中的jfilechooser是一个swing组件,它对web(或服务器)一无所知,当运行时,正如您所经历的那样,它会在运行它的系统(本例中是服务器)上打开选择。在base adempiere中有一个文件选择器示例。导入文件加载程序,您可以在
System Admin->Data->Data Import->Import File Loader
单击按钮标签zkwebui中管理这个的代码是
org.adempiere.webui.apps.form.WfileImport.java
它在初始化方法jbinit()中创建按钮
bFile.setLabel(Msg.getMsg(Env.getCtx(), "FileImportFile")); bFile.setTooltiptext(Msg.getMsg(Env.getCtx(), "FileImportFileInfo")); bFile.addEventListener(Events.ON_CLICK, this);
当点击时
if (e.getTarget() == bFile) { cmd_loadFile(); invalidate(); } the cmd_loadFile method is doing the work private void cmd_loadFile() { Media media = null; try { media = Fileupload.get(); } catch (InterruptedException e) { e.printStackTrace(); } if (media == null) return; if (media.isBinary()) { m_file_istream = media.getStreamData(); } else { ListItem listitem = fCharset.getSelectedItem(); if (listitem == null) { m_file_istream = new ReaderInputStream(media.getReaderData()); } else { Charset charset = (Charset)listitem.getValue(); m_file_istream = new ReaderInputStream(media.getReaderData(), charset.name()); } } log.config(media.getName()); bFile.setLabel(media.getName()); cmd_reloadFile(); }
这将使用zk框架组件fileupload实际打开所需的文件选择对话框并选择要加载的文件。然后,该方法的其余部分加载选定的文件。从示例代码中,一旦选择了要保存文件的文件,它就会出现。因为文件保存在服务器上,所以您真的要将文件上载到服务器上!这只是上面的一个小变化,zk网站提供了一些示例代码来实现这一点。
public class Upload { public static void saveToDisk() throws Exception { org.zkoss.util.media.Media media = Fileupload.get(); File f=new File(media.getName()); InputStream inputStream= media.getStreamData(); OutputStream out=new FileOutputStream(f); byte buf[]=new byte[1024]; int len; while((len=inputStream.read(buf))>0) out.write(buf,0,len); out.close(); inputStream.close(); String filepath = f.getAbsolutePath(); mdbConverter mdb = new mdbConverter(); Messagebox.show(filepath); } }
来源通过合并这两个示例,您应该能够为adempiere创建一个新的增强来完成您的任务。
1条答案
按热度按时间kzipqqlq1#
在adempiere中,用户可能使用两个可能的客户端。
基于swing的本地客户机运行在用户的pc上,在这种情况下,客户机pc几乎完成了会计和工作流之外的所有工作。这是90年代最流行的传统胖客户机-服务器体系结构。
第二个webui使用zk框架,而zk框架又基于ajax。当用户使用此界面时,所有代码都在服务器上运行,而客户端(pc)只处理(web)ui元素。事实上,使用zk框架,服务器也会处理大部分ui,因此用户的pc只呈现结果html。
示例代码中的jfilechooser是一个swing组件,它对web(或服务器)一无所知,当运行时,正如您所经历的那样,它会在运行它的系统(本例中是服务器)上打开选择。
在base adempiere中有一个文件选择器示例。导入文件加载程序,您可以在
单击按钮标签
zkwebui中管理这个的代码是
它在初始化方法jbinit()中创建按钮
当点击时
这将使用zk框架组件fileupload实际打开所需的文件选择对话框并选择要加载的文件。然后,该方法的其余部分加载选定的文件。
从示例代码中,一旦选择了要保存文件的文件,它就会出现。因为文件保存在服务器上,所以您真的要将文件上载到服务器上!这只是上面的一个小变化,zk网站提供了一些示例代码来实现这一点。
来源
通过合并这两个示例,您应该能够为adempiere创建一个新的增强来完成您的任务。