给出以下 jsf 页面
<h:form id="#{cc.clientId}>
<p:inputText id="txt" value="#{controller.property}" required="true"/>
<p:message for="txt"/>
<p:commandButton actionListener="#{controller.print()}" update="@form" value="Print"/>
</h:form>
控制器
@Named
public Controller {
private String property;
public void setProperty() ...
public String getProperty() ...
public void print() {
org.omnifaces.util.Faces.sendFile("".getBytes(), "file.pdf", true);
}
}
成就是:
- 输入 no txt -> 显示有关所需值的错误消息
- 在 txt 中输入值 -> 错误消息将被删除,PDF 将被发送回浏览器
怎么了:
- 输入 no txt -> 显示有关所需值的错误消息
- 在 txt 中输入值 -> 错误消息未删除,PDF 被发送回浏览器
原因对我来说很清楚,因为只向服务器发送了一个请求。
所以我尝试了:
<h:form id="#{cc.clientId}>
<p:inputText id="txt" value="#{controller.property}" required="true"/>
<p:message for="txt"/>
<p:commandButton actionListener="#{controller.print()}" update="@form" value="Print">
<p:ajax event="click" update="@form"/>
</p:commandButton>
</h:form>
但仍然只有一个请求发送到服务器。
旁注:在页面中显示 PDF 可以正常工作,但不再显示将表单放入 PDF 中。但首先我对发送两个请求的解决方案感兴趣。
提前谢谢,马库斯