0

2 つの p:commandButtons を持つ ah:form があります。1 つのボタンは、コンポーネント内の ui:repeat 内にネストされています。ui:include の外側にあるボタンは、アクション メソッドによって返されたターゲットの宛先に正しく移動しているようです。ただし、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>

そしてここに2番目のページ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>

そして最後にバッキング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 に答える