我存储值表达式的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