Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF页面中的EL评估不是连续的_Jsf_Jsf 2_Facelets_El - Fatal编程技术网

JSF页面中的EL评估不是连续的

JSF页面中的EL评估不是连续的,jsf,jsf-2,facelets,el,Jsf,Jsf 2,Facelets,El,我有一个带有ui:composition标记的XHTML,我正在AJAX上加载它。我正在使用jqueryajaxget加载这个XHTML的URL。在加载的页面中,我有一个EL表达式,在这之后,我还包括另一个源代码,它还有一些EL表达式。通常,计算包含源的EL表达式的时间要早于之前出现的EL表达式 Some.xhtml <ui:composition ... #{relationshipAction.followMember(param['relateToProfile'])}

我有一个带有ui:composition标记的XHTML,我正在AJAX上加载它。我正在使用jqueryajaxget加载这个XHTML的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>

您需要知道的一件非常重要的事情是

<ui:include> is evaluated during view build time, not during view render time
是在视图生成时计算的,而不是在视图渲染时计算的

因此,在呈现包含
{relationshipAction.followMember(param['relateToProfile'])}
的视图之前,对
进行了评估

规范没有说EL表达式是按文本顺序计算的。组件可以在其选择的JSF生命周期的任何阶段自由地评估EL表达式。它也可以仅在特定情况下对其进行评估,甚至可以多次评估

您不应该假设任何特定的顺序,除非在少数情况下规范实际定义了它。在您的例子中,JSF2.2的viewAction组件或preRenderView事件可能更适合。我认为,BALUC的使用相当容易理解


使用bean的(post)构造函数或(action)侦听器方法来代替。Bean属性必须返回已经准备好的值。我昨天回答了一个问题,OP犯了同样的概念错误。您可能会发现它也很有用:。

跟随另一个用户操作使纯jQuery ajax能够加载一个XHTML,该XHTML将有更新的信息(关于被跟随的用户)。在获取更新的信息之前,我们调用一个方法来完成操作(followuser)。我们将返回void的方法调用放在加载的页面中,正好在更新的info EL表达式之前。请求范围中的bean完成操作并获取更新的信息。我不希望这个bean在其
postconstruct
中执行follow操作,因为它可以在其他请求中被引用用于其他目的。在这种情况下,理想情况下我应该做什么?然后使用
侦听器。或者将bean子类化为另一个专门用于此目的的bean,并将
@PostConstruct
放在其中。再次感谢!我也想到了
f:event
,但是
preRenderEvent
显然不是一个选项,因为到那时,EL表达式已经被评估过了。是否有一个我可以与
ViewRoot
关联的事件适合这种场景?