f:ajax不使用execute和listener属性

f:ajax不使用execute和listener属性,ajax,jsf,Ajax,Jsf,我有一个表单,当我单击单选按钮时,它将使用三个文本框的值对控制器进行ajax调用 下面的代码在对控制器进行ajax调用的情况下运行良好 <h:selectOneRadio id="mobilePhoneId" styleClass="addradio" value="#{Controller.accountContactPageBean.mobilePhoneSelected}" onclick="onClickPreferredPhone(this)"> <f:sel

我有一个表单,当我单击单选按钮时,它将使用三个文本框的值对控制器进行ajax调用

下面的代码在对控制器进行ajax调用的情况下运行良好

<h:selectOneRadio id="mobilePhoneId" styleClass="addradio" value="#{Controller.accountContactPageBean.mobilePhoneSelected}" onclick="onClickPreferredPhone(this)">
    <f:selectItem itemValue ="Mobile" itemLabel="Preferred" />
    <f:ajax render="homePhone officePhone mobilePhone"  listener="#{Controller.resetPreferredLine('Mobile')}"/>
</h:selectOneRadio>

为了在ajax调用中发送文本框中的值,我在没有调用控制器plz帮助后在其中执行

下面是execute的外观

<h:selectOneRadio id="mobilePhoneId" styleClass="addradio" value="#{Controller.accountContactPageBean.mobilePhoneSelected}" onclick="onClickPreferredPhone(this)">
    <f:selectItem itemValue ="Mobile" itemLabel="Preferred" />
    <f:ajax render="homePhone officePhone mobilePhone" execute="homePhone officePhone mobilePhone" listener="#{Controller.resetPreferredLine('Mobile')}"/>
</h:selectOneRadio>


我不确定您的第一个代码是否有效,当您使用listener属性时,这必须指向具有下一个约定的方法:
public void MethodName(ajaxBehavityEvent事件)
但是顺便说一句,在执行中,您可能有一个无效id,您也可以通过这种方式发送表单中的所有值execute=“@form”或execute=“@all”.

对于更复杂的验证,最好从控制器进行验证。如果控制器中的值匹配,则抛出如下所示

if(true){
            FacesContext facesContext = FacesContext.getCurrentInstance();
            String mode = facesContext.getExternalContext().getRequestParameterMap().get("accountSaveType");
            FacesMessage message = new FacesMessage();
            message.setSummary("You error message");
            message.setDetail("You error message");
            facesContext.addMessage("your component ID", message);
            return path; //same page to throw the error eg. "/home/index"               
        }

您正在运行哪个JSF版本,在哪个浏览器中观察到了这一点?你试过其他浏览器吗?