【问题标题】:faces-config.xml: expression in to-view-id gets evaluated alwaysfaces-config.xml:to-view-id 中的表达式总是被评估
【发布时间】:2015-08-08 11:19:42
【问题描述】:

我正在使用 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 得到评估。虽然结果不同。 实际上,导航案例的列表要长得多。如果用户选择开始最后一个条目,则之前的所有其他条目都会被评估。意味着豆子被实例化,......不是一个轻量级的东西。所以你可以感觉到不同,第一个菜单项启动很快,最后一个很慢。

为什么要评估那些 EL 表达式? 我有机会关闭它吗? 还有其他提示如何改进吗?

【问题讨论】:

  • 我的第一个建议是(因为您使用 jsf 2.x)是使用隐式导航。 stackoverflow.com/questions/18037884/…
  • 您使用的是 Jboss AS 还是 Wildfly? JBoss AS 仅支持 JSF 2.1。
  • 我尝试过使用 JSF 2.2 的 WildFly 10。但旧版本显示出相同的效果。

标签: jsf jsf-2 jsf-2.2


【解决方案1】:

阅读 mojorra 2.2 源代码,很明显,无论您观察到的结果如何,都会评估 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

【讨论】:

  • 问题是,#{salesOrders.start()} 返回视图的名称以开始。不仅用于执行某些逻辑。根据配置,第一个视图可能会有所不同。
  • 为什么你没有index.xhtml调用一个带有动作的命令链接,那个动作可以返回你想去的视图?您的 faces-config.xml 中不需要任何内容​​。没有 from-action 的导航案例是非常无用的,因为它会评估对 from-view-id 执行的每个操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多