2016-04-15 32 views
-1

Ich habe die vielen Seiten mit ähnlichen Fragen gelesen und gesucht, aber ich kann nicht finden, warum mein commandButton die Aktion nicht aufruft (ich habe es debuggt und das ist das Problem). Mein Code sieht einfach aus, aber ... funktioniert nicht. Vielleicht ist es ein Anfängerproblem, aber ich weiß nicht wo es ist.commandButton ruft keine Aktion für verwaltete Beans auf

Ich schreibe ein Portlet für Liferay mit JSF2 und Liferay Faces Alloy.

Ich habe auch die Frage commandLink/commandButton/ajax backing bean action/listener method not invoked gelesen, sehr lehrreich für mich, aber keiner der Punkte hat mein Problem gelöst.

Hier ist meine mainView.xhtml Datei:

<?xml version="1.0"?> 

<f:view 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:aui="http://liferay.com/faces/aui" 
    xmlns:c="http://java.sun.com/jsp/jstl/core" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 

    <h:head /> 
    <h:body> 
     <h:form> 
      <h:messages globalOnly="true" layout="table" /> 
      <h:outputText id="esteTexto" value="#{ramSession.texto}" /> 
      <br /> 
      <h:commandButton action="#{ramSession.add}" styleClass="btn btn-default" value="#{ramSession.texto}"> 
      </h:commandButton> 
     </h:form> 
    </h:body> 
</f:view> 

Und hier ist meine SessionScoped ManagedBean Datei, RamSession.java:

@ManagedBean 
@SessionScoped 
public class RamSession extends AbstractBaseBean implements Serializable { 

    private static final long serialVersionUID = 919724848720360000L; 
    private String texto; 

    public void add() { 
     this.texto = new String("Entrando"); 
    } 

    @PostConstruct 
    public void postConstruct() { 
     this.texto = new String("Jereje"); 
    } 

    public String getTexto() { 
     logger.info("gettingTexto"); 
     addGlobalSuccessInfoMessage(); 
     return this.texto; 
    } 

    public void setTexto(String texto) { 
     this.texto = texto; 
    } 
} 

ich auch einen String versucht haben, Rückkehr (auch nicht notwendig) , mit einer actionListener-Methode und sogar mit ajax aber nichts. Kann mir jemand helfen? Danke vielmals.

+0

Also, wenn Sie entfernen '', beginnt es zu arbeiten? Wenn nicht, warum ist es in der Frage enthalten? – BalusC

+0

Ich entfernte die beiden , aber es funktioniert sowieso nicht. Ich habe nicht verstanden, was Sie meinten, wenn Sie gefragt, warum ist es in der Frage enthalten, ich will nur, dass es erscheint, wenn es nicht funktioniert Assessment Vielen Dank für Ihre Zeit! :) – ferda

+0

Auf diese Weise können Sie weiter die potenzielle Ursache und die Frage verbessern, indem Sie Störgeräusche reduzieren, die nicht zum Problem beitragen. – BalusC

Antwort

1

Vielleicht ist Ihr Mojarra-Listener nicht korrekt konfiguriert.

eine der beiden Folgen folgenden Unterschritte

a. Fügen Sie die Liferay-faces-init.jar Abhängigkeit in jedem Projekt Liferay JSF durch zu jedem pom.xml den folgenden Code hinzu:

<dependency> 
    <groupId>com.liferay.faces</groupId> 
    <artifactId>liferay-faces-init</artifactId> 
    <version>3.1.3-ga4</version> 
</dependency> 

b. Fügen Sie den folgenden Code in jedem WEB-INF/web.xml aller Ihrer JSF-Projekte:

<listener> 
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class> 
</listener> 
0

Warum Text in der Deklaration nicht initialisieren?

private String texto = "Jereje"; 

public void addGlobalSuccessInfoMessage(){ 
    //faces message 
} 

//Getter Setter 

Dann können Sie die gesamte PostConstruct-Methode entfernen. Auch wenn Sie nur eine Zeichenfolge festlegen und ohne Navigation aktualisieren möchten, verwenden Sie einfach f: setPropertyActionListener mit einem f: ajax zum Aktualisieren Ihrer Nachrichten. Sie können eine Aktion verwenden, wenn Sie möchten, indem Sie null oder void oder actionListener zurückgeben und die Zeichenkette darauf setzen, aber ich sehe nicht, warum Sie das wollen. Dieser Link kann bei diesen Optionen helfen ... Answer by Balus C. Möglicherweise möchten Sie auch zusätzliche Logik aus Ihrer Getter-Methode entfernen. Dies hat keinen Einfluss auf Ihr Problem, aber es ist sauberer und das Erstellen einer Erfolgsmeldung auf einem Getter scheint problematisch.

+0

Vielen Dank für Ihre Antwort, aber die Initialisierung von Text in der Deklaration funktioniert nicht. Wie ich im Update gesagt habe, könnte es eine schlechte Konfiguration oder Deklaration in .xml-Dateien geben, aber ich konnte sie nicht finden, denn wenn ich ein neues Projekt mit demselben Code beginne, funktioniert es – ferda