我存儲值表達式的JSF組件與F的「ValueExpression地圖」:屬性標記,例如:JSF組件
<h:inputText ...>
<f:attribute name="myId1" value="#{bean.prop1}" />
<f:attribute name="myId2" value="#{bean.prop2}" />
<f:attribute name="myId3" value="#{bean.prop3}" />
</h:inputText>
有沒有以編程方式訪問所有這些值表達式的方法嗎? (不知道名稱myId1,myId2,...)
JSF 2.1規範的第9.4.2節說,這些值存儲在「組件的ValueExpression映射表」中。 這是整個規範中唯一出現的術語「ValueExpression Map」。 如何訪問該地圖?
在UIComponent的方法getValueExpression()中的的Jboss /鑽嘴魚科執行地圖
getStateHelper().get(UIComponentBase.PropertyKeys.bindings)
的用於獲得一個單一值表達式。
我猜那個地圖是「ValueExpression Map」的超集? 我可以確定所有實現和所有繼承(標準)組件都使用該映射來存儲ValueExpressions嗎?
謝謝。
我不認爲該規範允許在屬性映射中存儲像上面那樣的f:屬性值。 Mojarra沒有。 你上面測試了你的代碼嗎?你正在使用哪個實現? – Thomas
咦?爲什麼你這麼想?所有組件的屬性都在那裏,參見鏈接的javadoc:*「返回一個表示與此UIComponent關聯的屬性(和屬性,見下文)的可變Map,由屬性名稱(必須是String)鍵入」*「。這從JSF 1.0開始就是這樣工作的。 – BalusC
9.4.2的規範說:「...對參數值調用isLiteralText()方法,如果返回true,則將該值存儲在上面派生的名稱下的組件屬性Map中;如果返回false,則存儲在上面派生的名稱下的組件的ValueExpression Map中的ValueExpression。「 此外,我已經testet它和屬性映射不包含它們。 – Thomas