2010-06-01 5 views
0

J'utilise des règles de navigation de page de couture. et n'a rencontré aucun problème avec l'ajout de règles qui redirigent d'une page à l'autre. Mais depuis que j'ai conçu mes pages vues en utilisant ces redirections ne se produisent plus pour ces pages. Essayé de définir la règle à la vue qui est incluse, puis à la vue qui comprend les autres (ce qui me semblait plus logique), mais aucun ne fonctionne. Y a-t-il quelque chose de spécial à propos de la navigation dans les pages en utilisant le view-id?Navigation de page de couture avec comprend

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> 

J'utilise jsf, xhtml que mes vues.

Merci

Répondre

4

Il est difficile pour moi de répondre à cette question parce que je ne comprends pas. Cependant, je vais essayer de deviner ce que vous demandez.

Vous avez une page à savoir: /somePage.xhtml et à l'intérieur de cette page, vous incluez d'autres pages.

J'ai tendance à écrire toutes mes pages de navigation dans pages.xml. J'aime tout avoir en un seul endroit, parce que cela rend les choses plus propres et plus faciles à entretenir.

Vous pouvez utiliser les caractères génériques également dans le fichier pages.xml.

Vous pouvez donc faire quelque chose comme ça.

<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> 

Dans l'exemple ci-dessus, je me sers un caractère générique pour dire que toute navigation qui se passe de/admin/* qui utilise une action spécifique, devrait rediriger vers une page I ai.

Vous pouvez également être très précis avec les pages

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

Si cela ne vous aide pas, vous devez préciser votre question mieux.

Mise à jour

Essayez de changer

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

A cette place

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

MISE À JOUR 2

Est-ce que toute votre navigation échouent? Ou est-ce seulement un peu?

Essayez de retirer le /* sur la vue de la page et le remplacer par juste *

Si vous faites cela fonctionnera:

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

maintenant de votre xhtml (Peu importe ce qui inclut la page il est de)

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

Et dans vos pages XML

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

Ce qui précède fonctionnera. Si ce n'est pas le cas, l'erreur est ailleurs dans votre code.

+0

J'ai à peu près la même règle que celle que vous avez définie ici (pas d'utilisation générique) qui a fonctionné parfaitement. Puis, au lieu d'avoir un simple contacts.xhtml contenant mes tous mes contacts, j'ai 'inclus' contacts.xhtml dans une autre page, appelée disons main.xhtml En effet j'ai déplacé la règle de navigation dans la page main.xhtml. mais ça a cessé de fonctionner. – Marc

+0

Ce doit toujours être le parent que vous déclarez. Donc, même si vous incluez la page FOO dans la page BAR, vous devez créer la navigation à partir de 'BAR.xhtml' et non' FOO.xhtml' –

+0

Ce qui est ce que j'ai fait. Essayer l'enfant était simplement une tentative aléatoire. L'action est déclenchée par l'enfant. J'ai pensé que peut-être cet événement n'est pas attrapé parce que cela n'arrive pas dans le parent lui-même. Avez-vous des pages incluses dans d'autres? avez-vous des règles de page sur ceux-ci? est-ce que ça marche? – Marc