2017-02-23 59 views
0

我有一個JSF頁面,在這裏我有這樣的形式:我的ActionListener被忽略

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

的問題是該行:

< F:ActionListener的結合=「#{historicCtrl.insertSearch (2)} />

被忽略,我不知道爲什麼。

我試過代碼的版本更容易:

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

這一個是工作,我可以看到痕跡,該方法應該打印在控制檯上,我有我的數據庫中插入。

與之相反,我在消息中寫入的第一個代碼沒有按預期工作。事實上,除了f; actionListener之外,所有工作都是自然而然的,正如我在上面所解釋的。

爲什麼這條指令是嵌入式的?

回答

0

你的代碼真的很讓人困惑,但我會專注於這個問題,並提供一個例子說明你的代碼應該是什麼樣的。

如果你要綁定你必須將其綁定到一個實現ActionListener的接口,而不是對象的方法一個ActionListener,例如:

的facelet

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

的ActionListener

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

    private static final long serialVersionUID = 6307961450435094233L; 

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

如果你使用綁定,你不能通過你的actionListener的一個參數。更好的方法是使用h:commandButton的actionListener屬性。在這種情況下,您的代碼應如下所示:

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