我试图在运行客户端(web)的进程上弹出文件选择器。但是文件选择器窗口出现在服务器机器上。
这里我们只使用JFileChooser ......
JFileChooser chooser = new JFileChooser();
chooser.setDialogTitle("Save Log File as");
chooser.setSelectedFile(new File("AttendenceBug.html"));
这项工作基于使用zk框架的adempiere erp。
答案 0 :(得分:0)
JFileChooser chooser = new JFileChooser();
chooser.setDialogTitle("Save Log File as");
chooser.setSelectedFile(new File("AttendenceBug.html"));
在 Adempiere 中,用户可能会使用两种可能的客户端。
基于本地 Swing 的客户端在用户的PC上运行,在这种情况下,客户端PC几乎完成了Accounting&流程。这是90年代最流行的传统胖客户端 - 服务器架构。
第二个是webUI,它使用 zk Framework ,后者又基于Ajax。当用户使用此界面时,所有代码都在服务器上运行,客户端(PC)仅在(Web)UI元素中处理。事实上,对于zk Framework,服务器也处理大部分UI,因此用户的PC只渲染生成的html。
示例代码中的 JfileChooser 是一个Swing组件,它对Web(或服务器)一无所知,运行时,如您所见,它会在运行它的系统上打开选择 - 在这种情况下是服务器。
基础Adempiere中有一个文件选择器示例。 您可以在
找到导入文件加载器System Admin->Data->Data Import->Import File Loader
点击按钮标签
管理此代码的代码在zk webui中
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 Framework组件 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创建一个新的增强功能来完成您的任务。