gpt4 book ai didi

jsf-2 - h :form rendered correctly, 但 h :commandLink doesn't get rendered correctly. 我必须在链接上单击两次

转载 作者:行者123 更新时间:2023-12-04 05:05:20 27 4
gpt4 key购买 nike

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

告诉我,我还没有成功。
所以网络应用程序的流程是:

我登录,成功时 bool 登录变为真,页面被重定向到 home.xhtml。 (bean TestBean 和 EnterView 被实例化和 SessionScoped)。在这个页面中,如果 loginedIn bool 值为真,我会得到 4 个链接。

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

带有链接的列表出现,但我必须单击它们两次才能执行它应该执行的操作。

片段:

        <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 它被正确渲染,所以它已经经历了 View 渲染阶段,但是当我单击链接时它不执行操作(只是当我单击它们两次时)所以它是 View 构建时间???我读了他们两个,我以为我明白了......

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

最佳答案

“需要单击两次才能调用操作”的症状可以识别为 JSF spec issue 790 的结果这在即将发布的 JSF 2.2 中得到修复。

就此而言,如果您有 2 个表单并且其中一个仅通过 ajax 更新另一个表单的父组件,那么另一个表单将丢失其 JSF View 状态(<input type="hidden" name="javax.faces.ViewState">)。第一次调用另一种形式的 ajax 操作不会调用任何操作,但会重新添加 JSF View 状态,任何后续操作都会成功。

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

<f:ajax ... render=":someComponent :otherForm" />
...

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

另见:
  • commandButton/commandLink/ajax action/listener method not invoked or input value not updated - 第 7 点
  • Communication in JSF 2.0 - Ajax rendering of content which contains another form
  • 关于jsf-2 - h :form rendered correctly, 但 h :commandLink doesn't get rendered correctly. 我必须在链接上单击两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15580654/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com