2017-02-23 4 views
0

ich eine JSF-Seite, wo ich diese Form haben:Mein Action ignoriert

<h:commandButton id="submit" value="Submit"> 


       <h:inputText id="locationInputId" value="#{historicCtrl.historic.search}" ></h:inputText> 

       <f:ajax event="click" render="resultGroup" listener="#{cSVobjectCtrl.doRender}"/> 
       <label for="lat">Latitude</label> 
       <h:inputText id="lat" value="#{cSVobjectCtrl.lat}"/> 
       <label for ="lng">Longitude</label> 
       <h:inputText id="lng" value="#{cSVobjectCtrl.lng}"/> 
       <f:actionListener binding="#{historicCtrl.insertSearch(2)}"/> 
      </h:commandButton > 

Das Problem ist, dass die Zeile:

< f: Action Bindung = "# {historicCtrl.insertSearch (2)} "/>

Wird ignoriert und ich weiß nicht warum.

Ich habe versucht, eine einfachere Version des Codes:

<h:form> 
      <h:outputText value="Lieu"/> 
      <h:inputText id="login" value="#{historicCtrl.historic.search}" required="true"></h:inputText> 
      <br/> 

      <h:commandButton value="Search"> 
       <h:outputText id ="textToInsertId" value="#{historicCtrl.insertSearch(2)}"/> 
      </h:commandButton> 
     </h:form> 

Dieses funktioniert, kann ich die Spur sehen, dass das Verfahren auf der Konsole drucken soll, und ich habe die Einfügung in meiner Datenbank.

Auf der anderen Seite der erste Code, den ich in der Nachricht schrieb, funktioniert nicht wie erwartet. In der Tat arbeitet alles natürlich, außer dem f, actionListener, wie ich oben erkläre.

Warum ist diese Anweisung ingnored?

Antwort

0

Ihr Code ist wirklich verwirrend, aber ich konzentriere mich auf die Frage und gebe ein Beispiel dafür, wie Ihr Code aussehen sollte.

Wenn Sie eine Action Sie es auf ein Objekt zu binden zu binden, das Action-Interface und nicht auf ein Verfahren implementiert, zum Beispiel:

Facelet

<f:actionListener binding="#{historicCtrl}" /> 

Action

@ManagedBean 
@ViewScoped 
public class HistoricCtrl implements Serializable, ActionListener { 

    private static final long serialVersionUID = 6307961450435094233L; 

    @Override 
    public void processAction(ActionEvent e) throws AbortProcessingException { 
     // TODO implement 
    } 
} 

Wenn Sie Bindung verwenden, können Sie nicht bestehen ein Argument für Ihren actionListener. Der bessere Ansatz besteht darin, das actionListener-Attribut von h: commandButton zu verwenden. In diesem Fall sollte Ihr Code wie folgt aussehen:

<h:form id="form"> 
    <h:inputText id="locationInputId" value="#{historicCtrl.historic.search}" /> 

    <br /> 

    <h:outputLabel for="lat" value="Latitude" /> 
    <h:inputText id="lat" value="#{cSVobjectCtrl.lat}"/> 

    <br /> 

    <h:outputLabel for="lng" value="Longitude" /> 
    <h:inputText id="lng" value="#{cSVobjectCtrl.lng}"/> 

    <br /> 

    <h:commandButton id="submit" value="Submit" actionListener="#{historicCtrl.insertSearch(2)}"> 
     <f:ajax execute="form" render="resultGroup" listener="#{cSVobjectCtrl.doRender}"/> 
    </h:commandButton> 
</h:form> 
Verwandte Themen