アプリを実行してボタンをクリックしても、まったく何も起こりません
裏ではいろいろなことが起こっています!
POST
Facesサーブレットによって処理されるサーバーへのリクエストをトリガーします。
- これによりJSF ライフサイクルが開始され、このチュートリアルに従ってデバッグできます。JSF ライフサイクルについては、最後の 2 つのフェーズについてのみ説明します (他のリンクは、他の 4 つのフェーズ、特に BalusC について非常によく説明しています)。
- Invoke Application フェーズ (5 番目のフェーズ) では、サーバー
generateLicenseFile
は.<h:commandButton>
<h:form>
- このフェーズからは何も返さないため、Render Response フェーズ (6 番目のフェーズ) では、ViewState が更新された現在のビューのみが取得されます。また、ビュー内のどのコンポーネントにも大きな更新を行わないため、何も表示されません。
また、Bean は@RequestScoped
フォームの送信ごとに作成されるように構成されているため、generate
フィールドは常にfalse
リクエスト時に作成されます (表示されている値を変更していないため、値はそのまま残りfalse
ます)。Bean の作成は、宣言されたスコープによって異なります。詳細: JSF 2 での通信: マネージド Bean スコープ。
ビューに何かを表示したい場合は、コードを少し変更することをお勧めします。
JSF コード
<h:form>
#{agreement.generate}
<br />
<h:commandButton value="Generate License File" type="button"
action="#{agreement.generateLicenseFile}" />
</h:form>
マネージドBean
@ManagedBean(name="agreement")
@ViewScoped //removed RequestScoped, this WILL make the difference
public class AgreementBean {
private boolean generate = false;
public void generateLicenseFile(){
generate = !generate;
}
//getter and setter for generate field
}