【问题标题】:h:form rendered correctly, but h:commandLink doesn't get rendered correctly. I have to click twice on linkh:form 正确渲染,但 h:commandLink 未正确渲染。我必须在链接上单击两次
【发布时间】:2013-03-22 22:09:47
【问题描述】:

我知道这个问题被问了一遍又一遍。我确实喜欢在与此相关的所有问题中提出的建议,并且我做了 BalusC 在this question that I put

告诉我,我还没有成功。 所以web app的流程是:

我登录,当成功时,布尔loginIn 变为真,页面被重定向到home.xhtml。 (bean TestBean 和 EnterView 被实例化和 SessionScoped)。如果loggedIn布尔值为真,则在此页面中我有4个链接。

不使用 JSTL c:choose 标签(因为 JSTL 和 JSF “一个在视图构建时运行,另一个在视图渲染时运行。” - BalusC)我使用了渲染属性。

显示链接列表,但我必须单击它们两次才能执行应执行的操作。

sn-p:

        <h:form rendered="#{enterView.userBean.loggedIn}">
            <ul id="grileList">
                <li><h:commandLink action="#{menuView.showTestsPage(1)}"
                        value="label1" rendered="#{enterView.userBean.loggedIn}"/></li>
                <li><h:commandLink action="#{menuView.showTestsPage(2)}"
                        value="label2" rendered="#{enterView.userBean.loggedIn}"/></li>
                <li><h:commandLink action="#{menuView.showTestsPage(3)}"
                        value="label3"  rendered="#{enterView.userBean.loggedIn}"/></li>
                <li><h:commandLink action="#{menView.showTestsPage(4)}"
                        value="label4" rendered="#{enterView.userBean.loggedIn}"/></li>
            </ul>
        </h:form>

h:form 它被正确渲染,因此它已经经历了视图渲染阶段,但是当我单击链接时它不执行操作(仅当我单击它们两次时)所以它是视图构建时间? ??我读过他们两个,我以为我明白了......

我已经将rendered属性放在commandLinks中尝试渲染它们,但我没有成功。

【问题讨论】:

    标签: jsf-2 facelets render


    【解决方案1】:

    “需要单击两次才能调用操作”的症状可以识别为 JSF spec issue 790 的结果,该问题已在即将到来的 JSF 2.2 中修复。

    直言不讳,如果您有 2 个表单,其中一个仅通过 ajax 更新另一个表单的父组件,那么另一个表单将失去其 JSF 视图状态(&lt;input type="hidden" name="javax.faces.ViewState"&gt;)。第一次以另一种形式调用 ajax 操作不会调用任何操作,但会将 JSF 视图状态添加回来,然后任何后续操作都会成功。

    要解决此问题,您需要在 ajax 渲染中明确指定其他表单的客户端 ID。例如

    <f:ajax ... render=":someComponent :otherForm" />
    ...
    
    <h:someComponent id="someComponent">
        <h:form id="otherForm" rendered="#{enterView.userBean.loggedIn}">
            ...
    

    另见:

    【讨论】:

    • 非常感谢!!!一如既往,你是一个很大的帮助,你是一个真正的大师!我实际上使用了您博客上的 JavaScript 脚本来解决问题。我希望他们能解决它...
    • 它更通用,我在多个地方都遇到过这个问题。再次感谢您!
    猜你喜欢
    • 1970-01-01
    • 2013-03-03
    • 2012-09-30
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多