JSF:导航规则在向操作方法添加参数后停止工作
JSF: navigation-rule stopped working after adding parameter to action method
我正在对 JSF Web 应用程序进行现代化改造,我是从退休人员那里接手的,无法回答问题。
目前的工作是简化一个h:dataTable。每条记录都有一个commandLink去相应的详情页。
旧版本:动作方法openDetail(),通过绑定dataTable并循环遍历记录来确定选中的记录行。
新版本: 操作方法现在是 openDetail(Long id) 当然我在命令中添加了参数 link 还有。
我的操作方法使用正确的参数调用,我通过添加一些日志输出验证了这一点。 但是导航规则不再有效。 虽然操作方法 returns 的结果是正确的,但它停留在带有 table 的页面上。
faces-config.xml 中的导航规则如下所示:
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-action>#{myBean.openDetail}</from-action>
<from-outcome>success</from-outcome>
<to-view-id>/mysks/detail.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
我需要调整导航规则吗? JSF 对重载操作方法有影响吗?
<from-action>
必须 完全 匹配 文字字符串 ,如 action
属性中所定义。
因此,如果它当前看起来像这样:
<h:commandButton ... action="#{myBean.openDetail(detail.id)}">`
那么 <from-action>
必须正是那个文字字符串:
<from-action>#{myBean.openDetail(detail.id)}</from-action>
然而,整个导航规则系统在 JSF 中并没有被证明是真正有用的,并且自从 2009 年 JSF 2.0 发布以来,它实际上已被弃用,该版本引入了对立即 returning <to-view-id>
作为 return 值,称为“隐式导航”。本质上,基于 XML 的导航规则实际上是侏罗纪 JSF 1.x 的“遗留物”,您最好摆脱它们。
所以如果你简单地从
调整openDetail()
方法
public String openDetail(Long id) {
// ...
return "success";
}
到
public String openDetail(Long id) {
// ...
return "/mysks/detail.xhtml?faces-redirect=true";
}
然后你可以从 faces-config.xml
.
中摆脱整个 <navigation-rule>
膨胀
另请参阅:
- JSF implicit vs. explicit navigation
我正在对 JSF Web 应用程序进行现代化改造,我是从退休人员那里接手的,无法回答问题。
目前的工作是简化一个h:dataTable。每条记录都有一个commandLink去相应的详情页。
旧版本:动作方法openDetail(),通过绑定dataTable并循环遍历记录来确定选中的记录行。
新版本: 操作方法现在是 openDetail(Long id) 当然我在命令中添加了参数 link 还有。
我的操作方法使用正确的参数调用,我通过添加一些日志输出验证了这一点。 但是导航规则不再有效。 虽然操作方法 returns 的结果是正确的,但它停留在带有 table 的页面上。
faces-config.xml 中的导航规则如下所示:
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-action>#{myBean.openDetail}</from-action>
<from-outcome>success</from-outcome>
<to-view-id>/mysks/detail.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
我需要调整导航规则吗? JSF 对重载操作方法有影响吗?
<from-action>
必须 完全 匹配 文字字符串 ,如 action
属性中所定义。
因此,如果它当前看起来像这样:
<h:commandButton ... action="#{myBean.openDetail(detail.id)}">`
那么 <from-action>
必须正是那个文字字符串:
<from-action>#{myBean.openDetail(detail.id)}</from-action>
然而,整个导航规则系统在 JSF 中并没有被证明是真正有用的,并且自从 2009 年 JSF 2.0 发布以来,它实际上已被弃用,该版本引入了对立即 returning <to-view-id>
作为 return 值,称为“隐式导航”。本质上,基于 XML 的导航规则实际上是侏罗纪 JSF 1.x 的“遗留物”,您最好摆脱它们。
所以如果你简单地从
调整openDetail()
方法
public String openDetail(Long id) {
// ...
return "success";
}
到
public String openDetail(Long id) {
// ...
return "/mysks/detail.xhtml?faces-redirect=true";
}
然后你可以从 faces-config.xml
.
<navigation-rule>
膨胀
另请参阅:
- JSF implicit vs. explicit navigation