我有一個奇怪的問題,我一直試圖解決一段時間,但我被困在一個地方,不太明白這裏發生了什麼。無法使用JSF表達式值設置託管屬性參數
我的索引頁看起來是這樣的:
<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用於選定的位置。問題是什麼都沒有發送。當我從Menu中選擇一些值時,'peek'outputText被正確地重新渲染,我可以看到正確的選擇。但是它不會被髮送到下一頁和Bean。令人驚訝的是,當我將參數的值更改爲固定字符串時,它的工作原理!因此,即:
<f:param name="selected" value="someValue1" />
在下一個Bean中正確讀取!所有的bean都被請求作用於RichFaces @KeepAlive註解的範圍(我嘗試了沒有註釋並且它是相同的)。 IHAVE treied: - 改變A4J:命令按鈕來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>
沒有任何一個有一個想法,爲什麼這不起作用?我已經使用過去那樣的託管屬性參數,它的工作原理(意思是使用一些動態更改的值而不是靜態字符串)。
BalusC:謝謝你的工作。我只重新編輯了outputText以查看selectOneMenu是否正確地賦值。但是現在我發現實際上需要正確傳輸參數。感謝您的貢獻。 –
不客氣。 – BalusC
我不知道是否仍有機會回答,但我現在只注意到這個解決方案存在一個問題 - 只有在selectOneMenu中的值實際發生更改時纔會起作用。如果不會更改(即用戶決定第一個默認選項),則該屬性不會被設置。我可以用selectOneMenu的第一個值初始化參數(這些值是動態填充的,所以不能硬編碼)。 –