У меня одна и та же проблема в нескольких местах, и я очень разочарован.
Когда я пытаюсь вызвать событие ajax, это всегда требует двух щелчков, первый просто ничего не делает.
Я пытался сделать первый клик, а затем вручную обновить сайт, но опять ничего не происходит.Для запуска события всегда требуется два щелчка.
В приведенном ниже коде показана простая форма входа в систему с использованием композита.Здесь для входа в систему требуется два клика.
Основное тело
<body>
<h:outputScript library="js" name="topMenuJS.js" />
<div class="topMenu">
<f:ajax execute="pageNavForm" render=":currentMainContent">
<h:form id="pageNavForm">
<h:commandLink styleClass="selector" rendered="#{viewErrandsBean.userID.name != null}" action="#{renderHandler.showCreateIssue()}" value="Create errand" />
<h:commandLink styleClass="selector" rendered="#{viewErrandsBean.userID.name != null}" action="#{renderHandler.showIssue()}" value="View errand" />
<h:commandLink styleClass="selector" rendered="#{viewErrandsBean.userID.admin}" action="#{renderHandler.showCreateUser()}" value="Create user" />
<h:commandLink styleClass="lastSelector" action="#{renderHandler.showLogin()}" value="Login" />
</h:form>
</f:ajax>
<div style="clear:both;" />
</div>
<h:panelGroup layout="block" id="currentMainContent">
<h:panelGroup rendered="#{renderHandler.loginPanel}" id="loginPanel"
layout="block">
<ui:include src="/content/login/login.xhtml">
<ui:param name="renderID" value=":pageNavForm" />
</ui:include>
</h:panelGroup>
</h:panelGroup>
</body>
И login.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:composition>
<h:outputStylesheet library="css" name="loginPageCSS.css" />
<h:panelGroup class="centerBox">
<h:form>
<table>
<tr>
<td>Username</td>
<td><h:inputText value="#{viewErrandsBean.loginName}" /></td>
</tr>
<tr>
<td>Password</td>
<td><h:inputSecret value="#{viewErrandsBean.loginPass}" /></td>
</tr>
<tr>
<td>
<h:commandButton value="Login" action="#{viewErrandsBean.authenticateUser()}" >
<f:ajax execute="@form" render="#{renderID}" />
</h:commandButton>
</td>
</tr>
</table>
</h:form>
</h:panelGroup>
</ui:composition>
</html>
Заранее спасибо:)
----------- РЕДАКТИРОВАТЬ -----------
IКажется, я нашел корень проблемы, но я не уверен, как я могу это исправить или почему она там есть.
Проблема с требованием двойного щелчка возникает только после рендеринга компонента с этимАтрибут "Rendered = 'boolean'".Или даже более конкретно, только после перехода от «Rendered = false» к «Rendered = true».
Следующий код работает должным образом, если для Rendered задано значение true.
<h:panelGroup rendered="#{renderHandler.loginPanel}" id="loginPanel" layout="block">