Следующий упрощенный код работает, когда я устанавливаю ajax = "false". С ajax = "true" второй commandButton не вызывает personPM.commitEditPerson() при нажатии после того, как был обновлен Button1 или Button2.commandButton не выполняется, если компонент обновлен ajax.
Может кто-нибудь помочь мне, что здесь не так? Потому что, кажется, не так легко решить, я добавляю весь код, который может быть легко воспроизведен (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>
Session Bean Scoped 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");
}
}
Это ваш фактический код? Есть ли валидаторы в полях во второй форме? Проверьте JavaScript-консоль, чтобы увидеть, есть ли на самом деле запрос, отправляемый на сервер. Значение BTW 'ajax = true' является значением по умолчанию. – user1983983
Не уверен, что это устраняет проблему, но вы используете 'action', когда нужно использовать' actionListener': http://stackoverflow.com/questions/3909267/differences-between-action-and-actionlistener – Lester
@ user1983983 Да, это фактический код. Валидаторов нет. Консоль JavaScript сообщает мне, что запрос отправляется на сервер. Но personPM.commitEditPerson() не вызывается (я внедрил сообщение журнала). – timmornYE