f:ajax不在jsf app中渲染目标组件

时间:2014-05-06 13:45:19

标签: java ajax eclipse jsf tomcat

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

在开始时,我看到组件的ID已经更新,其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)存在一个错误。我希望我不会再遇到这样的错误。

1 个答案:

答案 0 :(得分:0)

我的建议是更改&#34;执行&#34;

<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%确定这是否适合你。它适用于我,但我不知道<a4j:ajax>组件

的内容/原因