これはプロにとって簡単なはずです:
JSF / Facelets / Seamを使用していて、ラジオボタンを表示しようとしています。次に、ユーザーがボタンの1つをクリックした後、値を保存し、ユーザーはすぐに別のページにリダイレクトする必要があります(つまり、送信ボタンをクリックする必要はありません)。
ラジオボタンは機能しますが、転送は機能しません。
ありがとう
実際、Richfaces を使用してa4j:support コンポーネントを追加できます。
<h:selectOneRadio value="#{myBean.myValue}" ...>
...
<a4j:support event="onclick" action="#{myBean.doSomething}"/>
</h:selectOneRadio>
Java コードで:
public String doSomething() {
// Your code goes here...
...
// Now, we move to the new page.
return "some-outcome";
}
ただし、新しいライブラリを追加できない (または追加したくない) 場合は、古い方法でこれを行うことができます。
<h:selectOneRadio value="#{myBean.myValue}" ... onclick="this.form.submit();" valueChangeListener="#{myBean.doSomething}">
...
</h:selectOneRadio>
このコードは、onclick Javascript イベントが検出されると、ラジオ ボタンが含まれるフォームを送信します。サーバー側では、アクション doSomething が実行されます。このメソッドでは、実行するナビゲーション ルールを作成できます。
public void doSomething(ValueChangeEvent evt) {
// Your code goes here...
...
// Now, we move to another page...
FacesContext context = FacesContext.getCurrentInstance();
NavigationHandler navigation = context.getApplication().getNavigationHandler();
navigation.handleNavigation(context, "", "some-outcome");
}
some-outcome は、faces-config.xml のナビゲーション ルールで定義された結果です。
JSF 2.0 を使用すると、次のことができます。
<h:selectOneRadio ...
...
<f:ajax event="change" render="@form" />
</h:selectOneRadio>