0

我有一个带有身份验证的页面,该页面指向我的模板页面,其中有菜单。

  <navigation-rule>
    <from-view-id>pages/login.xhtml</from-view-id>
    <navigation-case>
      <from-outcome>userOK</from-outcome>
      <to-view-id>pages/template.xhtml</to-view-id>
    </navigation-case>
    <navigation-case>
      <from-outcome>userNOK</from-outcome>
      <to-view-id>pages/login.xhtml</to-view-id>
    </navigation-case>    
  </navigation-rule>

我的页面模板.xhtml

<h:form>
<p:menu type="plain" style="width:200;box-shadow: 6px 6px 6px black;top:-18;left:-40" >
    <p:submenu label="Dossier" id ="Dossier" >  
        <p:menuitem update=":contentform,:messages" value="Nouveau Dossier" action="#{choix.setPage('ajoutDossier')}" 
    ....
    ....
</h:form>

<h:form id="contentform" >
    <h:panelGroup  rendered="#{choix.page == 'ajoutDossier'}">
        <ui:include src="Dossier/ajoutDossier.xhtml" />
    </h:panelGroup>
    ....
    ....
</h:form>

问题是第一次单击时未调用操作,我必须单击 2 次,并且在我单击多次并且未调用操作之前,有时只是在最后一个位置工作的 p:submenu

同样,当它没有转发页面 template.xhtml 时,它也可以工作!

4

2 回答 2

1

您没有利用 JSF 模板。您无需使用模板和多个模板客户端,而是将所有内容放在一个页面中;并有条件地渲染东西。查看本教程或任何其他关于 jsf 模板的教程。
通常你会有一个模板,它包含所有页面共有的所有布局和内容;<ui:insert name="title" >Default content</ui:insert>并根据需要多次使用标签(使用不同的名称)。然后创建一个模板客户端,使用定义模板

<ui:composition template="./../resources/templates/templateFile.xhtml">

然后使用标签<ui:define name="nav2">设置要包含在模板中的内容。

除此之外,关于代码中导航的问题:当您进行导航时,您不会更新内容,因为在导航之后页面已完全加载(没有 ajax)。所以首先你必须删除你的更新属性;并且您还必须将 p:menuitem 的“ajax”属性设置为 false;因为默认情况下它是真的。否则导航将不会发生。
如果您做得很好,则不需要导航规则中的重定向属性。它可以与前锋完美配合。forward 的唯一问题是浏览器 URL 不会改变,因为浏览器没有收到导航通知。

于 2012-05-29T12:11:15.117 回答
0

i found the solution i have to add <redirect /> after the <to-view-id> of page which have the problem, because i read that JSF uses internal FORWARD instead of REDIRECT to navigate to the success page and this why the URL will not get changed but i don't really undestand why ??

here is the code who work :

  <navigation-rule>
    <from-view-id>pages/login.xhtml</from-view-id>
    <navigation-case>
      <from-outcome>userOK</from-outcome>
      <to-view-id>pages/template.xhtml</to-view-id>
      <redirect />
    </navigation-case>
    <navigation-case>
      <from-outcome>userNOK</from-outcome>
      <to-view-id>pages/login.xhtml</to-view-id>
    </navigation-case>    
  </navigation-rule>

also to not loose css of redirect page i have to add this

<link rel="stylesheet" href="#{request.contextPath}/css/style.css" />
于 2012-05-28T21:02:38.247 回答