selectOneMenu的Ajax事件在被commandLink更新时未被调用

时间:2015-09-04 12:51:56

标签: ajax jsf

当我手动更改 selectOneMenu 的选定值时:

  • selectOneMenu的选定值更改为“2”
  • 我在控制台上得到'2',这意味着' selectOneMenuAjaxEvent '被调用了。
  • 我在Firebug的“网络”标签上收到一条XHR请求。

但是当我尝试通过单击commandLink来更改所选值时:

  • selectOneMenu的选定值更改为“2”
  • 我在编辑器控制台中什么都没有,这意味着没有调用' selectOneMenuAjaxEvent '。
  • 我在Firebug的“网络”选项卡上也没有任何XHR请求,这意味着即使没有发送此ajax事件。
  • Firebug控制台上没有显示任何错误。

为什么当命令链更改值时, selectOneMenu的 ajax更改事件未被发送?

的index.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head></h:head>

<h:body>
    <h:form id="mainForm">

        <h:selectOneMenu id="selectMenu" value="#{indexBean.selectedValue}">
            <f:selectItem itemLabel="1" itemValue="1" />
            <f:selectItem itemLabel="2" itemValue="2" />

            <f:ajax listener="#{indexBean.selectOneMenuAjaxEvent}" />
        </h:selectOneMenu>

        <h:commandLink value="Change Selected Value"
                       action="#{indexBean.changeSelectedValue}"/>

    </h:form>
</h:body>
</html>

IndexBean

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import java.io.Serializable;

@ManagedBean
@ViewScoped
public class IndexBean implements Serializable {

    private String selectedValue = "1";

    public void changeSelectedValue(){
        selectedValue = "2";
    }

    public void selectOneMenuAjaxEvent(){
        System.out.println(selectedValue);
    }

    public String getSelectedValue() {
        return selectedValue;
    }
    public void setSelectedValue(String selectedValue) {
        this.selectedValue = selectedValue;
    }

}

0 个答案:

没有答案