Meine Seite enthält eine Login-Header, die ich über UI: Include einschließen. Die enthaltene Seite enthält einen Dialog mit einem p: commandButton. Wenn sich der Benutzer anmeldet, wird die Include-Seite entsprechend der @form im Attribut update ordnungsgemäß aktualisiert. Ich möchte auch eine Komponente außerhalb der enthaltenen Seite aktualisieren, die eine Schaltfläche anzeigen soll, wenn der Benutzer angemeldet ist. Die Include-Seite wird aktualisiert und der Name des angemeldeten Benutzers wird angezeigt. Aber der Button auf der Hauptseite wird nicht angezeigt. Es wird angezeigt, wenn ich die Seite jedoch aktualisiere. Ich kann nicht herausfinden, was ich hier falsch mache. Jeder hat irgendwelche Ideen.JSF-Komponente wird nicht von meinem p: commandButton in einem Dialogfeld gerendert in enthaltene Seite
Die Kopfseite zeigt auch die Komponente commandLink ordnungsgemäß an. Wenn Sie jedoch auf den Abmeldelink klicken, wird die Schaltfläche auf der Hauptseite nicht entfernt. Da der BefehlLink keinen AJAX verwendet, gehe ich davon aus, dass ein normaler POST der Seite ausgeführt wird. Welche sollte die ganze Seite neu laden. Funktioniert das nicht von einer Seite, auf die mit ui verwiesen wurde: include?
Die Anmeldeseite verwendet eine Sitzungsbereichs-Backing-Bean. Die Hauptseite ist Ansichtsbereich.
Hier ist der im Lieferumfang enthaltenen xhtml (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>
...
Dieser ist in der folgenden Haupt-Seite enthalten:
...
<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>
Hallo Kevkodez. Danke für die Antwort. Ich verweise jedoch auf eine gerenderte Komponente. Die panelGroup namens createbutton wird immer gerendert. Es muss etwas anderes sein. – Pefero