2013-07-30 4 views
0

Следующий упрощенный код работает, когда я устанавливаю 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"); 
    }  
} 
+0

Это ваш фактический код? Есть ли валидаторы в полях во второй форме? Проверьте JavaScript-консоль, чтобы увидеть, есть ли на самом деле запрос, отправляемый на сервер. Значение BTW 'ajax = true' является значением по умолчанию. – user1983983

+0

Не уверен, что это устраняет проблему, но вы используете 'action', когда нужно использовать' actionListener': http://stackoverflow.com/questions/3909267/differences-between-action-and-actionlistener – Lester

+0

@ user1983983 Да, это фактический код. Валидаторов нет. Консоль JavaScript сообщает мне, что запрос отправляется на сервер. Но personPM.commitEditPerson() не вызывается (я внедрил сообщение журнала). – timmornYE

ответ

0

Проблема вызвана несоответствием версии. PF 3.5 не готов к JSF 2.2! Я использовал PF snapshot 4.0, и он сработал.

Этот код должен показать всю проблему и как ее решить с PF 3.5 и 2.2 JSD, но я настоятельно рекомендую использовать версии, которые работают вместе !:

<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> 

Если кнопки использовать «обновление =» : buttonpanel1 "" это приводит к поведению, которое я разместил здесь в вопросе: как только обновление произойдет, форма f2 больше не работает. Если кнопки используют «update =»: f2: buttonpanel2 «все работает так, как ожидалось.

+0

К сожалению, у меня нет никаких объяснений. Все версии работают для меня. :/Когда я заменяю значение 'update' -атрибута' Button2' на «: buttonpanel1», он по-прежнему отлично работает. – Lester

+0

Хорошо, спасибо, что посмотрели еще раз. Тогда это останется загадкой. Я надеюсь, что если кто-то еще столкнется с этой проблемой, это все равно поможет. – timmornYE

+1

У меня есть решение: это определенно несоответствие версии. PF 3.5 не готов к JSF 2.2. Я использовал PF 4 Snapshot, и он также работает при обновлении формы. – timmornYE

Смежные вопросы