我在AJAX上加载了一个带有ui:composition标签的XHTML。我正在使用XHTML来加载这个jQuery的URL。在加载的页面中,我有一个EL表达式,之后我还包括了另一个源,它有更多的EL表达式。通常,包含的源的EL表达式的求值时间早于它之前出现的EL表达式。
Some.xhtml
<ui:composition ...
#{relationshipAction.followMember(param['relateToProfile'])}
<ui:include src="someOther.xhtml">
<ui:param name="profileUri" value="#{param['relateToProfile']}" />
<ui:param name="qualifier" value="#{param['qualifier']}" />
<ui:param name="cellStyleClass" value="#{param['cellStyle']}" />
</ui:include>
在这里,我希望在包含的someOther.xhtml中,#{relationshipAction.followMember(param['relateToProfile'])}在任何EL之前被计算。但首先评估的总是someOther.xhtml中的ELs。
你知道会出什么问题吗?
发布于 2013-04-05 18:55:34
规范并没有说EL表达式是按文本顺序计算的。组件可以在其选择的JSF生命周期的任何阶段对EL表达式进行计算。它也可以仅在特定情况下进行评估,甚至可以多次评估。
您不应该假定任何特定的顺序,除非在极少数情况下规范实际定义了它。在您的例子中,JSF2.2的viewAction组件或preRenderView事件可能更合适。我认为,BalusC explains它们的用法非常易读。
发布于 2013-04-05 21:05:25
You should stop doing business logic in getter methods。
改为使用bean的(Post)构造函数或(Action)侦听器方法。Bean属性必须返回已经准备好的值。我昨天回答了一个问题,在这个问题中,OP犯了同样的概念错误。你可能会发现它也很有帮助:Bean methods execution precedence in JSF。
发布于 2013-04-05 17:58:21
您需要知道的一件非常重要的事情是
<ui:include> is evaluated during view build time, not during view render time因此,在呈现包含#{relationshipAction.followMember(param['relateToProfile'])}的视图之前,会对<ui:include>进行评估。
https://stackoverflow.com/questions/15829114
复制相似问题