次の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);
}
}
成果は次のとおりです。
- txt を入力しない -> 必要な値に関するエラー メッセージが表示される
- txt に値を入力 -> エラー メッセージが削除され、PDF がブラウザに送り返されます
何が起こるのですか:
- txt を入力しない -> 必要な値に関するエラー メッセージが表示される
- txt に値を入力 -> エラー メッセージ IS NOT REMOVED が表示され、PDF がブラウザに送り返されます
サーバーに送信されたリクエストは 1 つだけなので、その理由は明らかです。
だから私は試しました:
<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>
ただし、サーバーに送信されるリクエストは 1 つだけです。
補足: PDF の表示はページ内で正常に機能しますが、フォームを PDF に挿入すると表示されなくなりました。しかし、まず、2 つのリクエストを送信するソリューションに興味があります。
前もって、マーカス