ユーザーがいくつかのフィールドに入力する複雑なフォームがあり、ライセンス ファイルを生成するか、変更を保存するという 2 つのオプションがあります。ユーザーが変更を保存せずにライセンス ファイルの生成ボタンをクリックすると、小さなコンポーネントがレンダリングされ、ライセンスを生成する前に保存するよう求めるエラー メッセージが表示されます。警告メッセージ付きのコンポーネントを表示するには、ajax を使用して、警告コンポーネントをレンダリングするためだけにページ全体をレンダリングしないようにします。もちろん、変更が保存されていれば、警告メッセージは不要で、ユーザーを別のページにリダイレクトします。変更が行われたことを検出するために、変更可能なフィールドに変更リスナーがあります。私が知らないのは、条件付き実行です。「保存されていない場合はajaxでレンダリング、保存されている場合はリダイレクト」の部分。これがロジックです
if(saved){
redirect();
}else{
ajax.renderWarning()
}
--編集-- あまりにもオープンなままにしていることがわかったので、さらに情報を追加します。更新可能なフィールドの例を次に示します。
<h:inputText name="computername3" value="#{agreement.licenseServerBeans[2].computerId}" valueChangeListener="#{agreement.fieldChange}">
<rich:placeholder value="Add Computer ID"/>
</h:inputText>
fieldChange() Bean メソッド
public void fieldChange(ValueChangeEvent event) {
change = true; //change is a boolean, obviously :P
}
ライセンス生成ボタン jsf は次のとおりです。
<h:commandLink action="#{agreement.generateLicenseFile}">
<span class="pnx-btn-txt">
<h:outputText value="Generate License File" escape="false" />
</span>
</h:commandLink>
これが generateLicenseFile() メソッドです
public String generateLicenseFile(){
....//lots of logic stuff
return "/licenseGenerated.xhtml?faces-redirect=true";
}