我的actionListener被忽略了

时间:2017-02-23 17:40:17

标签: jsf

我有一个jsf页面,我有这个表格:

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

问题是该行:

  

&LT; f:actionListener binding =“#{historicCtrl.insertSearch(2)}”/&gt;

被忽略,我不知道为什么。

我尝试了更简单的代码版本:

<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之外,一切都在自然地工作。

为什么这条指令被忽视了?

1 个答案:

答案 0 :(得分:0)

您的代码确实令人困惑,但我会专注于这个问题并提供一个示例,说明您的代码应该是什么样的。

如果要绑定actionListener,则必须将其绑定到实现ActionListener-Interface的对象,而不是绑定到方法,例如:

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