如何解决JSF selectOneMenu onChange更新对象
我使用了How to include file from external local disk file system folder in JSF中答案的代码来提出:
JSF
...
<ui:define name = "content">
<h:form>
<span class="dataSpan" style="border-width:0px">
<object id="thePdf" data="#{request.contextPath}/my.pdf" type="application/pdf" width="1150" height="620">
<a href="#{request.contextPath}/my.pdf">Download file.pdf</a>
</object>
</span>
</h:form>
<h:form class="standardFont">
<span class="notesSpan" style="border-width:0px">
<p:panel header="Data Entry">
<h:panelGrid columns="1" border="0" styleClass="form-grid" columnClasses="form-column-label,form-column-input">
<h:outputLabel />
<h:outputLabel id="fileName" styleClass="centerBoldRed" value="#{pdfServlet.fileName}" >
</h:outputLabel>
<h:outputLabel />
<h:outputLabel for="fileNameList">Files:</h:outputLabel>
<h:selectOneMenu id="fileNameList" value="#{dataEntryBean.fileNameList}" styleClass="boldRed">
<f:selectItems value="#{dataEntryBean.fileNameList}" var="file" itemValue="#{file}" itemLabel="#{file}" />
</h:selectOneMenu>
<h:message class="error" for="fileNameList" id="fileNameListError" />
</h:panelGrid>
...
Java-PdfServlet
@Override
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
String s = "my.pdf";
File file = new File("//Temp/input/my/pdfs/IncomingPdf/" + s);
response.setHeader("Content-Type",getServletContext().getMimeType(file.getName()));
response.setHeader("Content-Length",String.valueOf(file.length()));
response.setHeader("Content-Disposition","inline; filename=\"" + file.getName()+ "\"");
Files.copy(file.toPath(),response.getOutputStream());
}
DataEntryBean
...
public List<String> getFileNameList() {
return fileNameList;
}
public final void setFileNameList() {
File folder = new File("//Temp/input/my/pdfs/IncomingPdf/");
FilenameFilter pdfFileFilter = (File dir,String name) -> {
return name.endsWith(".pdf");
};
File[] files = folder.listFiles(pdfFileFilter);
try {
for(File f : files) {
fileNameList.add(f.getName());
}
} catch (ArrayIndexOutOfBoundsException ex) {
fileNameList.add("No PDF file was found.");
}
}
...
这很好用。在查看器中打开PDF文件,并且selectOneMenu显示目录中的所有文件名。
所以我的问题是这样的: 如何从selectOneMenu更改/选择名称,并在对象中打开该文件?
我想我必须将selectOneMenu中的itemValue用作PdfServlet的参数,并使用它代替s中的硬编码值,但是我不确定如何做到这一点。任何建议,将不胜感激。 TIA。
解决方法
这就是我所做的...不确定这是否正确,但这确实符合我的期望...
已添加到JSF(在顶部):
<f:metadata>
<f:viewAction action="#{dataEntryBean.onLoad()}" />
<f:viewAction action="#{pdfServlet.setFileName(dataEntryBean.fileName)}" />
</f:metadata>
并将其添加到fileNameListError之前:
<h:commandButton value="Submit" action="#pdfServlet.setFileName(dataEntryBean.fileName)}"/>
然后在我更改的PdfServlet中
String s = "my.pdf";
到
private static String s;
已添加到DataEntryBean:
public void onLoad() {
setFileNameList();
this.fileName = this.fileNameList.get(0);
}
正如我所说,我不确定这是否是100%正确的方法,但是它确实有效。任何使这更好的更新或校正将不胜感激。谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。