1

しばらくの間修正しようとしてきた奇妙な問題がありますが、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> 

なぜこれがうまくいかないのか、誰にも分かりますか?過去にそのような管理プロパティ パラメーターを使用したことがあり、機能しました (つまり、静的な文字列ではなく、動的に変更された値を使用することを意味します)。

4

1 に答える 1

1

<f:param>、フォーム送信要求時ではなく、最初の要求時 (フォームが表示されるとき) に評価されます。したがって、変更された値ではなく、初期値のままです。

ボタンを押す前に再評価されるように、<a4j:commandButton>anidを指定して で参照します。reRender<f:param>

<h:selectOneMenu id="selectMenu" value="#{indexBean.model.selected_id}" styleClass="indexItems">
    <f:selectItems value="#{indexBean.myModelValues}" />    
    <a4j:support event="onchange" reRender="peek,button" />        
</h:selectOneMenu> 
<br>
<h:outputText id="peek" value ="#{indexBean.model.selected_id}"/>
<br>
<a4j:commandButton id="button" value="Go to Form" action="form" styleClass="indexItems">
    <f:param name="selected" value="#{indexBean.model.selected_id}" />                                       
</a4j:commandButton>
于 2012-01-20T11:30:30.327 に答える