【问题标题】:Seam page navigation with includes带有包含的接缝页面导航
【发布时间】:2011-02-26 07:00:30
【问题描述】:

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

谢谢

【问题讨论】:

    标签: jsf seam


    【解决方案1】:

    我很难回答这个问题,因为我根本不明白。不过我会试着猜猜你在问什么。

    您有一个页面,即:/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>
    

    上述方法将起作用。如果没有,则错误位于代码中的其他位置。

    【讨论】:

    • 我的规则与您在此处定义的规则几乎相同(不使用通配符),效果很好。然后,我没有包含我所有联系人的简单contacts.xhtml,而是将contacts.xhtml“包含”到另一个页面视图中,比如说main.xhtml。事实上,我将导航规则移到了页面main.xhtml中。但它停止工作了。
    • 它应该始终是您声明的父级。因此,即使您在 BAR 页面中包含页面 FOO,您也必须从 BAR.xhtml 而不是 FOO.xhtml 创建导航
    • 这就是我所做的。试穿孩子只是一种随意的尝试。该动作是从孩子触发的。我想也许这个事件没有被抓住,因为它没有发生在父母本身。你有一些页面包含在其他页面中吗?你对这些有一些页面规则吗?有用吗?
    • 是的,我有很多包含。显示一些相关代码。显示xhtml和pages.xml,我看看。
    • 您有大量使用 a4j 包含的包含,或者您是否以不同的方式进行操作?我刚刚用我的规则编辑了这个问题。此规则确实有效并重定向到我指定的页面。但仅不使用 a4j 包含。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 2012-07-27
    相关资源
    最近更新 更多