1

我有一个场景,我必须在呈现 JSF 页面之前调用另一个 bean 并注册 bean 属性,因为 JSF 页面引用了 bean 属性来呈现响应。

我正在寻找实现这种情况的最佳选择。为了更好地理解,我尝试以伪代码的形式表示所需的场景。

页面 A --> 按钮“查看详细信息”与 BeanOne.getDetail() 绑定 -- 范围是会话。

BeanOne.getDetail()

处理请求 - 调用后端方法以获取详细信息 - 如果 (type == XYZ) 然后调用 BeanTwo.getTypeXYZ() 并根据为 BeanTwo.getTypeXYZ() 定义的导航规则重定向 - 否则如果 (type == RST) 然后调用BeanThree.getTypeRST() 并根据为 BeanThree.getTypeRST() 定义的导航规则重定向

BeanTwo.getTypeXYZ()

  • 处理请求
  • 调用后端方法获取详细信息
  • 设置 this.attributeB = 从后端方法返回的值。
  • 导航到页面 B

BeanTwo.getTypeRST()

  • 处理请求
  • 调用后端方法获取详细信息
  • 设置 this.attributeC = 从后端方法返回的值。
  • 导航到页面 C

类似于在导航规则中使用 bean 方法名称

<navigation-rule>
<from-view-id>Page A</from-view-id>
<navigation-case>
<from-action>#{beanOne.getDetail}</from-action>
<from-outcome>xyz</from-outcome>
<to-view-id>#{beanTwo.getTypeXYZ}</to-view-id>
</navigation-case>
<navigation-case>
<from-action>#{beanOne.getDetail}</from-action>
<from-outcome>rst</from-outcome>
<to-view-id>#{beanTwo.getTypeRST}</to-view-id>
</navigation-case>
</navigation-rule>

4

1 回答 1

0

你试过用navication-rulefaces-config.xml

<navigation-rule>
 <navigation-case>
  <from-outcome>XYZ</from-outcome>
  <to-view-id>pageB.xhtml</to-view-id>
  <redirect/>
  </navigation-case>
 <navigation-case>
  <from-outcome>RST</from-outcome>
  <to-view-id>pageC.xhtml</to-view-id>
  <redirect/>
 </navigation-case>
</navigation-rule> 

在豆

getTypeXYZ() {
   ...
   NavigationHandler nh = facesContext.getApplication().getNavigationHandler();
   nh.handleNavigation(facesContext, null, "XYZ");
}
于 2012-12-02T09:00:00.700 回答