f的问题:JSF中的ajax需要双击才能执行

f的问题:JSF中的ajax需要双击才能执行,ajax,jsf-2,Ajax,Jsf 2,我在一些地方遇到了同样的问题,我感到相当沮丧 每当我试图触发ajax事件时,总是需要两次单击,第一次单击什么也不做 我试着启动第一次点击,然后手动刷新站点,但还是没有任何效果。总是需要单击两下才能触发事件 下面的代码显示了一个使用composite的简单loginform。在这里,登录按钮需要点击两下才能启动 主体 <body> <h:outputScript library="js" name="topMenuJS.js" /> <div cl

我在一些地方遇到了同样的问题,我感到相当沮丧

每当我试图触发ajax事件时,总是需要两次单击,第一次单击什么也不做

我试着启动第一次点击,然后手动刷新站点,但还是没有任何效果。总是需要单击两下才能触发事件

下面的代码显示了一个使用composite的简单loginform。在这里,登录按钮需要点击两下才能启动

主体

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

用户名
暗语
提前感谢:)

------编辑------------

我相信我已经找到了问题的根源,但我不知道如何解决它,也不知道它为什么会存在

需要双击的问题仅在呈现具有“Rendered='boolean'”属性的组件后出现。或者更具体地说,只有在它从“Rendered=false”变为“Rendered=true”之后

如果“渲染”设置为true,则以下代码将按预期工作

<h:panelGroup rendered="#{renderHandler.loginPanel}" id="loginPanel" layout="block">

以下是您没有寻找的答案:与其使用“呈现”来隐藏登录表单,不如使用CSS来隐藏它,并使用javascript来显示它。与返回服务器决定显示表单相比,您将获得更好的表单响应时间。我意识到这可能不适用于你没有提到的其他情况

我相信,在JSF2和Facelets之间的交互中,您(对我们大多数人)处于灰色地带。当您在ajax或post-back期间要求页面呈现组合中的新元素时,您是在向JSF组件树添加内容,而不是在从头开始构建JSF组件树时成为它的一部分。这就是为什么在将“渲染”设置为true时,您会看到正确的行为

结合在组合的各个部分之间传递参数,我不能保证renderID设置为您第一次单击login时所认为的状态


您应该能够通过使用h:outputText输出renderID的值来进行确认。

以下是您没有寻找的答案:与其使用“rendered”来隐藏登录表单,不如使用CSS来隐藏它,并使用javascript来显示它。与返回服务器决定显示表单相比,您将获得更好的表单响应时间。我意识到这可能不适用于你没有提到的其他情况

我相信,在JSF2和Facelets之间的交互中,您(对我们大多数人)处于灰色地带。当您在ajax或post-back期间要求页面呈现组合中的新元素时,您是在向JSF组件树添加内容,而不是在从头开始构建JSF组件树时成为它的一部分。这就是为什么在将“渲染”设置为true时,您会看到正确的行为

结合在组合的各个部分之间传递参数,我不能保证renderID设置为您第一次单击login时所认为的状态


您应该能够通过使用h:outputText输出renderID的值进行确认。

是否附加了其他内容?浏览器中的代码是否存在其他干扰?就像javascript或附加的.js文件中的一点悬停效果一样?是否附加了其他内容?浏览器中的代码是否存在其他干扰?就像javascript或附加的.js文件中的一点悬停效果?