ui:include with方法打破了jsf的ajax函数

时间:2012-07-26 14:15:05

标签: ajax primefaces

我正面临一个非常类似的问题,我已经开了一张票,但现在问题出现在我的主项目中。上一张票涉及一个测试项目。 Here's票证的链接。我将首先简要解释一下我的项目,然后提供代码。

这是一个基本的ui,因为我遗漏了不相关的部分,但是当你启动webapp时,你应该被引导到主页面,它通过使用ajax加载了一个介绍。我正在使用一个名为Navigation的托管bean,它是一个带有2个注释和一个名为“page”的字符串属性的简单pojo。我已将该属性设置为'intro',因此默认情况下已加载。

// Navigation.java
@ManagedBean
@RequestScoped
public class Navigation {

  private String page = "intro";

  public String getPage() {
      return page;
  }

  public void setPage(String page) {
    this.page = page;
  }
}

index.xhtml看起来像这样:

<!-- index.xhtml -->
<h:body>
    <!-- Navigation -->
    <h:form>
        <p:menubar>
            <p:menuitem value="Home" icon="ui-icon-home" action="#{navigation.setPage('intro')}" update=":contentPanel" />
            <p:submenu label="Actions" icon="ui-icon-transferthick-e-w">
                <p:submenu label="Employee">
                    <p:menuitem value="Search" action="#{navigation.setPage('employee/find')}" update=":contentPanel" />
                </p:submenu>
            </p:submenu>
        </p:menubar>
    </h:form>
    <!-- ContentPanel -->
    <p:panel id="contentPanel" styleClass="content">
       <ui:include src="/#{navigation.page}.xhtml" />
    </p:panel>
</h:body>

现在,当您导航到'Actions / Employee / Create new'时,文件find.xhtml会加载到主页面中,但表单本身不起作用。这是文件:

<!-- find.xhtml -->
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:ui="http://java.sun.com/jsf/facelets"
            xmlns:p="http://primefaces.org/ui"
            xmlns:f="http://java.sun.com/jsf/core">
    <f:facet name="header">
      Create new employee
    </f:facet>
    <h:outputLabel value="User ID: " for="userId" />
    <p:inputText value="#{managedEmployee.userId}" id="userId" />
    <p:commandButton value="Show" update="result" />
    <h:outputText id="result" value="#{managedEmployee.userId}" />
</ui:composition>

因此,用户可以在表单中输入userId,并在按下commandbutton时显示在表单附近。显然我必须做错事但我似乎无法弄明白。我不喜欢这样说,但我很想找到答案。

提前致谢!

2 个答案:

答案 0 :(得分:0)

我可能不理解这个问题,但你没有在commandButton上设置动作,所以当然它不会做任何事情。

 <p:commandButton value="Show" update="result" />

应该有像

这样的东西
 <p:commandButton value="Show" update="result" action="#{backer.method}"/>

答案 1 :(得分:0)

我找到了解决问题的方法。不知道是什么原因,但是如果我用u:form包围代码:使用h:form组合并添加该表单id以在其工作的链接上更新。 希望这可以帮助他人遇到它。干杯

<p:menuitem value="Create" action="#{navigationBean.setPage('employee/create')}" update=":contentPanel :form" />
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:p="http://primefaces.org/ui">
  <h:form id="form">
    ...
  </h:form>
</ui:composition>