Ma page contient un en-tête de connexion que j'inclus via ui: include. La page incluse contient une boîte de dialogue avec un p: commandButton. Lorsque l'utilisateur se connecte, la page d'inclusion est actualisée correctement en fonction du @form dans l'attribut de mise à jour. Je veux également mettre à jour un composant en dehors de la page incluse, qui doit afficher un bouton lorsque l'utilisateur est connecté. La page d'inclusion s'actualise et le nom de l'utilisateur connecté est affiché. Mais le bouton de la page principale n'est pas affiché. Il est affiché si je rafraîchis la page si. Je ne peux pas comprendre ce que je fais mal ici. N'importe qui a des idées.Le composant JSF n'est pas rendu à partir de mon p: commandButton dans une boîte de dialogue de la page incluse
La page d'en-tête affiche également correctement le composant commandLink. Mais lorsque vous cliquez sur le lien de déconnexion, le bouton de la page principale n'est pas supprimé. Comme le commandLink n'utilise pas ajax, je suppose qu'un POST de page normal est fait. Ce qui devrait recharger toute la page. Cela ne fonctionne-t-il pas à partir d'une page qui a été référencée avec ui: include?
La page de connexion utilise un bean backing de portée de session. La page principale est vue étendue.
Voici le xhtml inclus (login.xhtml):
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<div style="width:100%;font-size:12px;line-height:20px;background-color:#b0d9e6;color:white">
<h:form>
<h:message id="top_msg"></h:message>
<h:panelGrid width="100%" columns="3" columnClasses="none,right1,right1">
<h:outputLink rendered="#{!loginController.loggedIn}" styleClass="text-align:right;" value="javascript:void(0)" onclick="PF('dlg').show();" title="login">
<p:outputLabel>Login</p:outputLabel>
</h:outputLink>
<h:commandLink rendered="#{loginController.loggedIn}" action="#{loginController.logout}" styleClass="text-align:right;" >
<h:outputLabel>Logout</h:outputLabel>
</h:commandLink>
<p:growl id="growl" sticky="true" showDetail="true" life="3000" />
<p:dialog header="Login" widgetVar="dlg" resizable="false">
<h:panelGrid columns="2" cellpadding="5">
<h:outputLabel for="username" value="Username:" />
<p:inputText id="username" value="#{loginController.username}" required="true" label="username" />
<h:outputLabel for="password" value="Password:" />
<p:password id="password" value="#{loginController.password}" required="true" label="password" />
<f:facet name="footer">
<p:commandButton value="Login"
update="@form :createform:createbutton"
actionListener="#{loginController.login}"
oncomplete="handleLoginRequest(xhr, status, args)" >
</p:commandButton>
</f:facet>
</h:panelGrid>
</p:dialog>
</h:panelGrid>
<script type="text/javascript">
function handleLoginRequest(xhr, status, args)
</script>
</h:form>
</div>
</ui:composition>
...
Celui-ci est inclus dans la page principale suivante:
...
<ui:include src="login.xhtml" />
<h:form id="createform">
<h:panelGroup id="createbutton" layout="block">
<p:commandButton id="createnew"
ajax="false"
action="#{recepieController.createNewRecipes}"
value="Create new recipe"
rendered="#{recepieController.loggedIn and !recepieController.create and !recepieController.viewOnly and !recepieController.edit}"
accesskey="s">
</p:commandButton>
</h:panelGroup>
</h:form>
Bonjour Kevkodez. Merci d'avoir répondu. Cependant je fais référence à un composant rendu. Le panelGroup appelé createbutton est toujours rendu. Ça doit être autre chose. – Pefero