JFileChooser chooser = new JFileChooser();
chooser.setDialogTitle("Save Log File as");
chooser.setSelectedFile(new File("AttendenceBug.html"));
在Adempiere中,用户可能使用 两种可能的客户端。
基于本地Swing的客户端在用户的 PC 上运行,在这种情况下,客户端 PC 几乎完成了会计和工作流之外的所有工作。这是90 年代最流行的传统Fat 客户端-服务器架构。
第二个,webUI,使用基于 Ajax的zk 框架。当用户使用此界面时,所有代码都在服务器上运行,而客户端(PC) 仅在 (web) UI 元素中进行处理。事实上,使用 zk 框架,服务器也处理大部分 UI,因此用户的 PC 仅呈现生成的 html。
您的示例代码中的JfileChooser是一个 Swing 组件,它对 Web(或服务器)一无所知,并且在运行时,正如您所体验的那样,它会在运行它的系统上打开选择 -在本例中为服务器。
base 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 框架组件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 创建一个新的增强功能来完成您的任务。