【问题标题】:f:ajax does not render target components in jsf appf:ajax 不在 jsf 应用程序中呈现目标组件
【发布时间】:2014-05-06 13:45:19
【问题描述】:

我正在使用 Eclipse 和 Apache Tomcat 使用 Java EE、JSF、Hibernate、MySQL 编写 Web 应用程序。我不使用 Spring、EJB 等。

一开始,我看到组件的 id 写在下面的“渲染”部分代码中,这些组件被更新了。但是,经过一些代码开发,我意识到 f:ajax 不再更新这些组件了。此外,没有触发 bean 中的函数(prepareTempUsrGrp 和 prepareTempUsr) - “adminPanelFacade”。我回到了可以正常工作的应用程序版本,但现在那个版本也不能工作了!

<input jsfc="h:commandButton" id="usrGrpHiddenBtn" class="hiddenBtn"  action="#{adminPanelFacade.prepareTempUsrGrp}">
    <f:ajax execute="adminPanelForm" render="grpDetNameInp managerPanel planMngmnt alarmMngmnt raporMngmnt devRegMngmnt energyCons mntnncLifeTime logMngmnt" />
</input>
<input jsfc="h:commandButton" id="usrHiddenBtn" class="hiddenBtn" action="#{adminPanelFacade.prepareTempUsr}">
    <f:ajax execute="adminPanelForm" render="usrDetUsrName usrDetUsrGrpName usrDetPass usrDetFName usrDetLName usrDetAddress usrDetTel usrDetMail" />
</input>

一些组件示例;

...
<tr class="grpDetTblRghtRow">
    <td>
        <input jsfc="h:selectBooleanCheckbox" id="managerPanel" title="Yönetici Paneli" value="#{adminPanelFacade.tempUsrGrp.ADMINISTRATOR_SCR}" />
    </td>
    <td>
        <span jsfc="h:outputText" value="Yönetici Paneli"/>
    </td>
</tr>
<tr class="grpDetTblRghtRow">
    <td>
        <input jsfc="h:selectBooleanCheckbox" id="planMngmnt" title="Planlama Yönetimi" value="#{adminPanelFacade.tempUsrGrp.PLANNING_SCR}" />
    </td>
    <td>
        <span jsfc="h:outputText" value="Planlama Yönetimi"/>
    </td>
</tr>
<tr class="grpDetTblRghtRow">
    <td>
        <input jsfc="h:selectBooleanCheckbox" id="alarmMngmnt" title="Alarm Yönetimi" value="#{adminPanelFacade.tempUsrGrp.ALARM_MNGMNT_SCR}" />
    </td>
    <td>
        <span jsfc="h:outputText" value="Alarm Yönetimi"/>
    </td>
</tr>
...

如果我删除 f:ajax 行,它会起作用并且 bean 的功能会被触发。但是,我不想刷新所有页面。我只想更新特定的组件,所以我需要这个解决方案。 我知道组件 ID 是正确的。此外,我在控制台上没有看到任何 Java 异常。

我从 Eclipse 中删除了服务器配置。我删除了 Tomcat 7.0 并重新安装。我在 Eclipse 中创建了新服务器。然而,什么也没发生。还是不行!

非常感谢所有反馈!

编辑: 有新信息!该应用程序在另一台计算机上正常工作,就像在我上次代码开发之前在我的计算机上工作一样。我的浏览器、Eclipse、Tomcat 等可能有任何损坏吗?虽然我解决了这个问题,但是当我继续在我的代码中使用 f:ajax 时,浏览器、Eclipse 等是否存在损坏的风险?

解决方案: 这太奇怪了,但是在我的应用程序的基础结构进行了一些不同的更改后,问题就解决了。 1)我将Tomcat 7.0从32位版本升级到64位版本。 2)我将在服务器端(localhost)工作的JSF库从(jsf-api-2.2.0-m03.jar和jsf-impl-2.2.0-m03.jar)升级到(jsf-api- 2.2.6.jar 和 jsf-impl-2.2.6.jar) 3)升级后,它没有工作。然后,我更改了 .xhtml 页面的 form-id。我运行了应用程序,我看到它有效!然后,我改回了form-id。它仍然有效!

我认为我工作的系统(Eclipse、JSF 库或 Tomcat)的基础架构存在错误。希望以后不会再遇到这样的错误。

【问题讨论】:

    标签: java ajax eclipse jsf tomcat


    【解决方案1】:

    我的建议是更改“执行”

    <f:ajax execute="adminPanelForm" render="grpDetNameInp managerPanel planMngmnt alarmMngmnt raporMngmnt devRegMngmnt energyCons mntnncLifeTime logMngmnt" />
    

    <f:ajax execute="@this" render="grpDetNameInp managerPanel planMngmnt alarmMngmnt raporMngmnt devRegMngmnt energyCons mntnncLifeTime logMngmnt" />
    

    甚至可以添加event 参数。

    我怀疑您想在输入发生问题而不是在表单提交时重新呈现 id。

    我不能 100% 确定这是否适合您。它对我有用,但我不知道 &lt;a4j:ajax&gt; 组件的内容/原因

    【讨论】:

    • @W vd L,我尝试使用“@this”和“event='click'”,但不会再次触发操作函数。在您提出建议后,我在 行中添加了“xmlns:rich="richfaces.org/rich" 和 "xmlns:a4j="richfaces.org/a4j"。但是,该应用程序就像没有 行一样工作,当我单击相关按钮时,整张纸都会刷新。
    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2017-08-07
    相关资源
    最近更新 更多