我使用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表达式? 我有机会关掉它吗? 任何其他暗示如何改善这个?
答案 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