在客户端机器中弹出文件选择器的java代码



我试图在运行客户端(web)的进程上弹出一个文件选择器。但是文件选择器窗口出现在服务器机器上。

这里我们只使用JFileChooser。。。

JFileChooser chooser = new JFileChooser();
chooser.setDialogTitle("Save Log File as"); 
chooser.setSelectedFile(new File("AttendenceBug.html"));

本工作基于使用zk框架的adempiere erp。

JFileChooser chooser = new JFileChooser();
chooser.setDialogTitle("Save Log File as"); 
chooser.setSelectedFile(new File("AttendenceBug.html"));

Adempiere中,用户可能使用两个客户端

基于本地Swing的客户端在用户的PC上运行,在这种情况下,客户端PC几乎完成了Accounting&工作流。这是90年代最流行的传统Fat客户端服务器架构。

第二个是webUI,它使用zk框架,而zk框架又是基于Ajax的。当用户使用此界面时,所有代码都在服务器上运行,客户端(PC)仅在(web)UI元素中进行处理。事实上,使用zk Framework,服务器也处理大部分UI,因此用户的PC只呈现生成的html。

示例代码中的JfileChooser是一个Swing组件,它对web(或服务器)一无所知,当运行时,正如您所经历的那样,它会在运行它的系统上打开选择,在这种情况下是Server

在基础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增强来完成你的任务。

相关内容

  • 没有找到相关文章

最新更新