查询JSF 1.2中的重新定位导航规则

时间:2013-02-09 12:21:30

标签: navigation jsf-1.2

如果我有以下导航规则:

<navigation-rule>
    <from-view-id>Mainview</from-view-id>
    <navigation-case>
        <from-outcome>outcome1</from-outcome>
        <to-view-id>view1</to-view-id>  
    </navigation-case>
    <navigation-case>
        <from-outcome>outcome2</from-outcome>
        <to-view-id>view2</to-view-id>  
        <redirect/>         
    </navigation-case>
    <navigation-case>
        <from-outcome>outcome3</from-outcome>
        <to-view-id>view3</to-view-id>  
        <redirect/>         
    </navigation-case>
</navigation-rule>

如果整个流程没有任何验证错误,一切都会正常工作。那就是:

步骤1)MainForm中的方法返回outcome1呈现view1     步骤2)view1中的方法返回result2渲染view2 步骤3)view2中的方法返回outcome3呈现view3

请注意,上述规则中没有重定向,这意味着浏览器会在浏览器窗口中显示主视图。

如果在上面的第2步,验证失败,那么浏览器将不会显示view2,而是会在地址栏中显示view1。

现在,对于下一个流程(一旦验证成功),起点将不是Mainview但是view1意味着必须写入导航案例     with view1

如何处理?我们需要编写另一组导航规则吗?或者像上面那样设计导航规则是完全错误的?

1 个答案:

答案 0 :(得分:0)

查看specification,我们必须得出结论,每个<from-view-id>只能有一个<navigation-rule>标记。

  

from-view-id:包含完整页面标识符(页面的上下文敏感相对路径)或以星号(*)通配符结尾的页面标识符前缀的可选元素。如果使用通配符,则该规则适用于与通配符模式匹配的所有页面。要制作适用于所有页面的全局规则,请将此元素留空。

将此标记作为可选项,您可以指定或不指定 - 您还可以指定通配符视图ID,因此导航大小写覆盖与模式相关的每个视图ID - 但您只能为每个规则指定一个。 因此,对于您的情况,您有以下选择:

  • 创建新的导航规则以管理从view1开始的导航案例。
  • 使用模式覆盖您的视图ID,并使用通配符对它们进行分组(命名您的第一页 view0 ):

    <navigation-rule>
         <from-view-id>view*</from-view-id>
         <navigation-case>
         <from-outcome>outcome1</from-outcome>
         <to-view-id>view1</to-view-id>  
    </navigation-case>
    <navigation-case>
        <from-outcome>outcome2</from-outcome>
        <to-view-id>view2</to-view-id>  
        <redirect/>         
    </navigation-case>
    <navigation-case>
        <from-outcome>outcome3</from-outcome>
        <to-view-id>view3</to-view-id>  
        <redirect/>         
    </navigation-case>
    

  • 只是不要指定from-view-id并让它适用于您实际所在的每个view-id。当您为每个案例使用不同的结果时,您将不会遇到任何问题。