0

ajax="false" を設定すると、次の簡略化されたコードが機能します。ajax="true" を使用すると、2 番目の commandButton は、Button1 または Button2 によって更新された後にプッシュされたときに personPM.commitEditPerson() を呼び出しません。

誰かがここで何が悪いのか助けてもらえますか? 解決するのは簡単ではないようなので、簡単に再現できるコード全体を追加します (JSF 2.2、Primefaces は 3.5、GlassFish 4.0):

<?xml version='1.0' encoding='UTF-8' ?>
<!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:h="http://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
            <h:form id="f1">                    
                <p:commandButton id="Button1" update=":neuePerson" value="Neue Person" action="#{testPM.setCurrentPerson()}"/>
            </h:form>

            <h:panelGroup id="neuePerson">
                <h:form id="f2" >
                    <p:commandButton id="Button2" update=":neuePerson" value="Übernehmen" action="#{testPM.commitEditPerson()}"/>
                </h:form>
            </h:panelGroup>
    </h:body>
</html>

セッション スコープ Bean TestPM.java:

package at.feimas.administration.presentation;

import java.util.logging.Level;
import java.util.logging.Logger;

public class TestPM {

    private String currentPerson;
    private String firstName;

    private static final Logger logger = Logger.getLogger(TestPM.class.getName());

    public void setCurrentPerson() {
        logger.log(Level.INFO, "New Person");
    }    
    public void commitEditPerson(){
        logger.log(Level.INFO, "Edit Person");
    }    
}
4

1 に答える 1

0

この問題は、バージョンの不一致が原因で発生します。PF 3.5 は JSF 2.2 の準備ができていません! 私は PF スナップショット 4.0 を使用しましたが、うまくいきました。

このコードは、問題全体と PF 3.5 および JSD 2.2 で解決する方法を示しているはずですが、一緒に動作するバージョンを使用することを強くお勧めします!:

<h:body>
    <h:form id="f1">                    
        <p:commandButton id="Button1" update=":f2:buttonpanel2" value="New Person" actionListener="#{testPM.setFirstName}"/>
    </h:form>

    <h:panelGroup id="buttonpanel1">
        <h:form id="f2">      
            <h:panelGroup id="buttonpanel2">
                <h:outputText value="#{testPM.firstName}" id="firstName"/>                
                <p:commandButton id="Button2" update=":f2:buttonpanel2" value="Apply" actionListener="#{testPM.commitEditPerson}"/>
            </h:panelGroup>
        </h:form>          
    </h:panelGroup>
</h:body>

ボタンが 'update=":buttonpanel1"' を使用している場合、これは質問でここに投稿した動作につながります: 更新が行われるとすぐに、フォーム f2 は機能しなくなります。ボタンが 'update=":f2:buttonpanel2"' を使用している場合、すべてが期待どおりに機能します。

于 2013-08-01T11:15:58.053 に答える