f:ajax 侦听器未被调用



考虑到JSF和AJAX,我遇到了一个问题。我试图在访问者插入客户id后更新一些客户详细信息。

首先,摘自html代码:

    <h:form>
    <h:panelGrid columns="2">
        <h:panelGrid columns ="2" border="1" id="customer_grid">
            <h:outputLabel value="#{mbean_msg.reservation_lblCustomerNo}" for = "customer_id"/>
            <h:inputText id = "customer_id" value="#{reservationHandler.customer.customer_id}">
                <f:ajax listener="{reservationHandler.autocompleteCustomerDetails}" 
                    render="customer_grid" />
            </h:inputText>
            <h:outputLabel value="#{mbean_msg.reservation_lblLastname}" for="lastname"/>
            <h:inputText id="lastname" value="#{reservationHandler.customer.lastname}" required ="true" 
                requiredMessage="#{error_msg.errmsgLastname}" validator="#{reservationHandler.validateCustomer}"/>
            <h:outputLabel value="#{mbean_msg.reservation_lblFirstname}" for="firstname"/>
            <h:inputText id="firstname" value="#{reservationHandler.customer.firstname}" required ="true"
                requiredMessage="#{error_msg.errmsgFirstname}" validator="#{reservationHandler.validateCustomer}"/> 

侦听器方法在我的java文件(ReservationHandler.java)中实现,如下所示:

public void autocompleteCustomerDetails(){
      System.out.println("Auto Complete"); // for testing
}

基本上我试图调用方法autocompleteCustomerDetails与监听器。不幸的是,这个方法永远不会被调用。无论如何,渲染似乎工作得很好,因为其他输入文本更新自己(可见)。

有人知道为什么不调用监听器吗?

目前显示的代码中有两个问题:

,

<f:ajax listener="{reservationHandler.autocompleteCustomerDetails}" />

这不是一个有效的EL表达式。EL表达式的形式是#{},而不是{}。相应修复:

<f:ajax listener="#{reservationHandler.autocompleteCustomerDetails}" />

,

public void autocompleteCustomerDetails() {

这不是<f:ajax listener>方法表达式的有效默认签名。标签文档清楚地告诉我们:

签名必须匹配public void processAjaxBehavior(javax.faces.event.AjaxBehaviorEvent event) throws javax.faces.event.AbortProcessingException

你忘记了参数。相应地添加它。对于未检查的异常,throws声明不是强制性的,所以我们可以省略它。

public void autocompleteCustomerDetails(AjaxBehaviorEvent event) {

或者,如果您真的打算去掉参数,那么您应该在EL方法表达式中放入圆括号:

<f:ajax listener="#{reservationHandler.autocompleteCustomerDetails()}" />

试试这个:

<f:ajax listener="{reservationHandler.autocompleteCustomerDetails()}" 
                render="customer_grid" />

或将方法更改为:getAutoCompleteCustomerDetails

只是为了测试…

无论如何,你不允许使用任何jsf的组件库?像初级面孔?它以一种简单的方式完成了工作……

无论如何,对于素面,我将这样做:

 <p:ajax event="blur" listener="#{prospectoRadarController.atualizarRadar(data)}" update=":mainForm:painelRadar" />

另一种猜测是,将execute="@this"添加到ajax标志中…

对不起,这些都是胡乱猜测,但我真的想帮忙。请反馈!

相关内容

  • 没有找到相关文章

最新更新