Seam页面导航包含

时间:2010-06-01 10:12:44

标签: jsf seam

我正在使用接缝页面导航规则。并且在添加从一个页面重定向到另一个页面的规则时没有遇到任何问题。 但是,由于我使用这些重定向设计了我的页面视图,因此这些页面不再发生。 试图将规则定义到包含的视图,然后到包含其他视图的视图(对我来说更有意义)但没有工作。 使用包含的view-id?

在seam中的页面导航有什么特别之处吗?

main.xhtml:

<h:outputLabel value="Details:"/>`

<a4j:include viewId="contacts.xhtml" id="contactsDetails"/>`

<page view-id="/*" login-required="true">
    <navigation>
        <rule if="#{myBean.readyToSee}">
            <redirect view-id="/see-contat.xhtml"/>
        </rule>
    </navigation>
</page>

我正在使用jsf,xhtml作为我的页面浏览量。

由于

1 个答案:

答案 0 :(得分:4)

我很难回答这个问题,因为我根本不理解它。但是我会猜测你在问什么。

您有一个页面,即:/somePage.xhtml,在该页面中包含其他一些页面。

我倾向于在pages.xml中写下我的所有页面导航。我喜欢在一个地方拥有所有东西,因为它使事情更清洁,更容易维护。

您也可以在pages.xml文件中使用通配符

所以你可以这样做。

<page login-required="true" view-id="/admin/*">
    <restrict>#{s:hasRole('orgadmin') or s:hasRole('sysadmin')}</restrict>
    <navigation from-action="#{userAdmin.editUser}">
        <redirect view-id="/admin/create_user.xhtml" />
    </navigation>

    <navigation from-action="#{applicationProcessAdmin.saveScheme}">
        <rule if-outcome="failure">
            <redirect view-id="/admin/processes.xhtml" />
        </rule>
    </navigation>
</page>

在上面的示例中,我使用通配符表示从/ admin / *发生的所有使用某些特定操作的导航应该重定向到我拥有的某个页面。

您也可以非常具体地使用页面

<page login-required="true" view-id="/officer/admin/contacts.xhtml">
    <begin-conversation join="true" />
    <navigation from-action="#{officerAdmin.saveContact}">
        <redirect/>
    </navigation>
</page>

如果这对您没有帮助,您需要更好地澄清您的问题。

<强>更新

尝试更改

<page view-id="/*" login-required="true"> 
  <navigation> 
    <rule if="#{myBean.readyToSee}">   
       <redirect view-id="/see-contat.xhtml"/> 
    </rule> 
  </navigation> 
</page>

改为

<page view-id="/*" login-required="true"> 
  <navigation from-action="#{myBean.readyToSee}"> 
    <rule if="#{myBean.readyToSee}">   
       <redirect view-id="/see-contat.xhtml"/> 
    </rule> 
  </navigation> 
</page>

更新2

您的所有导航都失败了吗?或者只是一些?

尝试删除页面视图上的/*,然后仅使用*

进行替换

如果这样做会起作用:

@Name("myBean")
public class MyBean {
  public String doSomething() {
    return "success";
  } 
}

现在来自您的xhtml(无论哪个包含来自哪个页面)

<!-- Depending on what button you are using, <h:form> is mandatory --> 
<h:form>
  <h:commandButton value="TEST" action="#{myBean.doSomething}" />
</h:form>

在您的网页xml中

<page view-id="*">
  <navigation from-action="#{myBean.doSomething}">
<rule if-outcome="success">
  <redirect view-id="/test.xhtml" />
</rule>
  </navigation>
</page>

以上将有效。如果没有,则错误在代码中的其他位置。