faces-config.xml:始终评估to-view-id中的表达式

时间:2015-08-08 11:19:42

标签: jsf jsf-2 jsf-2.2

我使用JBoss AS / WildFly和JSF 2.2。 这是我的faces-config.xml文件的一个例子。从我的起始页面(菜单页面)的结果我想调用下一个,to-view-id使用EL。

<navigation-rule>
    <from-view-id>/index.xhtml</from-view-id>
    <!-- Sales -->
    <navigation-case>
        <from-outcome>AUFTRAGSSUCHE</from-outcome>
        <to-view-id>#{salesOrders.start()}</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>AUFTRAGSERFASSUNG</from-outcome>
        <to-view-id>#{salesOrderEntry.start()}</to-view-id>
    </navigation-case>
</navigation-rule>

工作,但问题是,用户之前为所有情况选择了AUFTRAGSERFASSUNG EL,这里只评估AUFTRAGSSUCHE。虽然结果不同。 实际上,导航案例列表要长得多。如果用户选择开始最后一个条目,则在评估之前所有其他条目。意味着bean得到实例化,...不是轻量级的东西。所以你可以感受到不同,第一个菜单条目开始很快,最后一个很慢。

为什么评估这些EL表达式? 我有机会关掉它吗? 任何其他暗示如何改善这个?

1 个答案:

答案 0 :(得分:1)

阅读mojorra 2.2源代码,很明显,无论你观察到的结果如何,都会对to-view-id进行评估。否则无法配置它。

为什么el-expression首先出现在那里?你正在做一些动作然后返回视图ID吗?

更好的方法是使用视图操作:

<navigation-rule>
    <from-view-id>/index.xhtml</from-view-id>
    <!-- Sales -->
    <navigation-case>
        <from-outcome>AUFTRAGSSUCHE</from-outcome>
        <to-view-id>/sales-order/start.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>

然后在/sales-order/start.xhtml执行此操作:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h=" "
      xmlns:f=" ">
    <f:metadata>
        <f:viewAction action="#{salesOrders.start}"/>
    </f:metadata>
    <h:head>
        <title>Sales Order Start< /title>
    </h:head>
    <h:body>
        <!-- Sales order page here -->
    </h:body>
</html>

您只需要salesOrder.start()返回void