しばらくの間修正しようとしてきた奇妙な問題がありますが、1 つの場所で立ち往生しており、ここで何が起こっているのかよくわかりません。
私のインデックスページは次のようになります。
<h:selectOneMenu id="selectMenu" value="#{indexBean.model.selected_id}" styleClass="indexItems">
<f:selectItems value="#{indexBean.myModelValues}" />
<a4j:support event="onchange" reRender="peek" />
</h:selectOneMenu>
<br>
<h:outputText id="peek" value ="#{indexBean.model.selected_id}"/>
<br>
<a4j:commandButton value="Go to Form" action="form" styleClass="indexItems">
<f:param name="selected" value="#{indexBean.model.selected_id}" />
</a4j:commandButton>
selectOneMenu から選択した位置を取得したい場合、commandButton はユーザーを次のページに送ります。問題は、何も送信されないことです。メニューから値を選択すると、「peek」outputText が適切に再レンダリングされ、正しい選択が表示されます。ただし、次のページと Bean には送信されません。驚いたことに、パラメーターの値を固定文字列に変更すると機能します!!! つまり、これ:
<f:param name="selected" value="someValue1" />
次の Bean で正しく読み取られます!!! すべての Bean は、RichFaces @KeepAlive アノテーションでスコープ指定されてリクエストされます (アノテーションなしで試してみましたが、同じです)。-a4j:commandButton を h:commandLink または h:outputLink に変更 -indexBean.model.selected_id を indexBean.selected_id に変更 -最後に入力ソースを h:selectOneMenu から h:inputText に変更
ハードコーディングされた文字列は次のページに正しく渡されますが、式を使用しようとすると、パラメーターは常に空になります。
ここに、faces-config.xml のスニペットを投稿します。
<managed-bean>
<managed-bean-name>indexBean</managed-bean-name>
<managed-bean-class>id.webapp.beans.IndexBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>model</managed-bean-name>
<managed-bean-class>id.webapp.beans.Model</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>formBean</managed-bean-name>
<managed-bean-class>id.webapp.beans.FormBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>selectedValue</property-name>
<value>#{param.selected}</value>
</managed-property>
</managed-bean>
なぜこれがうまくいかないのか、誰にも分かりますか?過去にそのような管理プロパティ パラメーターを使用したことがあり、機能しました (つまり、静的な文字列ではなく、動的に変更された値を使用することを意味します)。