我有一个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之外,一切都在自然地工作。
为什么这条指令被忽视了?
答案 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>