face -config.xml: to-view-id中的表达式总是被求值



我使用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,这里只评估了AUFTRAGSSUCHE。虽然结果是不同的。实际上,导航案例的列表要长得多。如果用户选择开始最后一个条目,则计算之前的所有其他条目。意味着bean被实例化,…这不是一件无足轻重的事情。所以你可以感觉到不同,第一个菜单项开始快,最后一个非常慢。

为什么要对这些EL表达式求值?我能把这个关掉吗?还有其他建议吗?

阅读mojorra 2.2源代码,很明显,无论观察到的from-outcome是什么,都要对to-view-id进行评估。没有其他方法可以配置。

为什么el表达式首先在那里?你是否做了一些动作然后返回视图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

相关内容

  • 没有找到相关文章

最新更新