0

当我设置 ajax="false" 时,以下简化代码正在工作。使用 ajax="true" 时,第二个 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 回答