0

我有 ah:form 和两个 p:commandButtons。一个按钮嵌套在组件内的 ui:repeat 内。ui:include 外部的按钮似乎可以正确导航到 action 方法返回的目标。然而,嵌套在 ui:include 和 ui:repeat 中的相同按钮似乎重新初始化了视图范围的 bean,而不是导航到操作目标。有没有人有解释和解决方案或解决方法?

代码大致是这样的。mybean 是视图范围的。

<h:form id="myform">
<p:commandButton value="DoIt" action="#{mybean.doit()}" ajax="true"/> <!-- this works! -->
<ui:include src="/sections/util/mycomp.xhtml">
 <ui:param name="backingbean" value="#{mybean}"/>
</ui:include>
</h:form>

这是组件。

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                ...
                xmlns:p="http://primefaces.org/ui">
  <ui:repeat value="#{backingbean.mylit}" var="item" varStatus="status">
    <p:commandButton value="DoIt" action="#{backinbean.doit()}" ajax="true"/> <!-- this doesn't -->
  </ui:repeat>
</ui:composition>

奇怪的是,如果我将嵌套的 p:commandButton 重新定位在 ui:component 内但在 ui:repeat 之外,那么它可以工作。

有任何想法吗?

4

1 回答 1

0

嗨,我复制了您的代码并试图重现该问题,但似乎我的工作正常。顺便说一句,如果您想使用该按钮进行导航,您可能应该将 ajax 设置为 false。以下是我的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">

    <h:head></h:head>
    <h:body>
        <h:form id="myform">
            <p:commandButton value="DoIt" action="#{backingBean.goToAnotherPage()}" ajax="true"/> <!-- this works! -->
            <ui:include src="firstpage.xhtml">
                <ui:param name="bb" value="#{backingBean}"/>
            </ui:include>
        </h:form>
    </h:body>
</html>

这里是第二页 firstpage.xhtml:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">

            <ui:repeat value="#{bb.myList}" var="item" varStatus="status">
                <p:commandButton value="DoItInRepeat" action="#{bb.goToAnotherPage()}" ajax="true"/> <!-- this doesn't -->
            </ui:repeat>
            <ui:debug hotkey="x" />

</ui:composition>

最后是backing bean:

@ManagedBean
@ViewScoped
public class BackingBean {

    private List<String> myList = new ArrayList<String>();

    @PostConstruct
    public void init(){
        myList.add("1");
        myList.add("2");
        myList.add("3");
    }

    public String goToAnotherPage(){
        return "destpage.xhtml";
    }
    //Getters and Setters     
}
于 2012-12-19T08:08:43.970 回答