RT;第一级
<h:selectOneMenu value="#{DeviceStatBacking.queryDept}" onchange="placeChanged();" styleClass="searchtxt">
<f:selectItem itemLabel="11" itemValue="11"></f:selectItem>
<f:selectItem itemLabel="12" itemValue="12"></f:selectItem>
</h:selectOneMenu>
第二级
<h:selectOneMenu id="tempId" value="#{DeviceStatBacking.queryComp}" styleClass="searchtxt" readonly="false">
<f:selectItem itemLabel="21" itemValue="21"></f:selectItem>
<f:selectItem itemLabel="22" itemValue="22"></f:selectItem>
</h:selectOneMenu>
提交:
<h:commandButton value="查询" action="#{DeviceStatBacking.queryStat}" styleClass="butt" onclick="fuc();"></h:commandButton>
MB的queryStat():
public void queryStat()
{
System.out.println(this.queryComp);
System.out.println(this.queryComp1);
}
JS:
function placeChanged()
{
try
{

var sel1=document.getElementById("query:tempId");
var opt1=document.createElement("option");
opt1.innerHTML="23";
opt1.value="23";
sel1.appendChild(opt1);
}
catch(e)
{
alert(e);
}
}
function fuc()
{
alert(document.getElementById("query:tempId").value);

}触发第一级的onchange事件后新OPTION(value=23)能添加到页面中,选择第二级的原有项(value=21或22)fuc函数和queryStat均正常.只当选择第二级的新项(value=23)时,fuc正常弹出'23',而queryStat无任何输出.
谢谢留言!!!

解决方案 »

  1.   

    或者给我一份JSF级联下拉列表的其它实现也可以,我实在找不到了,谢谢~~~
      

  2.   

    JSF里 用JS方法修改参数是不顶用的 你必须把值传到后台在selectItem设置方法里添加新的选项不过这样需要刷新界面,速度上慢很多所以我一般这种情况都直接采用JSP方法JSP+JSF是不错的选择
      

  3.   

    可是有那么多ajax FOR JSF的框架,它们是怎么做到的?
      

  4.   

    我用纯JSF做了一个,要刷新页面,还要把BACKING BEAN设成SESSION的.觉得很差劲.
      

  5.   

    给你一个ajax的做参考吧
    <script language="JavaScript" type="text/JavaScript">
    //创建XMLHttpRequest对象       
    function createXMLHttpRequest() {
    if(window.XMLHttpRequest) { //Mozilla 浏览器
    XMLHttpReq = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) { // IE浏览器
    try {
    XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
    try {
    XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {}
    }
    }
    }
    // 处理返回信息函数
    function processResponse() {
      
       if (XMLHttpReq.readyState == 4) { // 判断对象状态
     //     alert(XMLHttpReq.status);
       if (XMLHttpReq.status == 200) { // 信息已经成功返回,开始处理信息
    DisplayHot();       } else { //页面不正常
               window.alert("您所请求的页面有异常。");
             }
         }}
    function DisplayHot() {
    var count = XMLHttpReq.responseText;
    var sel = document.getElementById("worth");
    sel.options.length=0; 
    var arrstr = new Array(); 
    arrstr = count.split(","); 
    //开始构建新的Select. 
    for(var i=0;i <arrstr.length;i++) 

    sel.options[sel.options.length]=new Option(arrstr[i],arrstr[i]); 

    }
    function chkWorth(){
    var gameName = document.getElementById("gameName").value;
    //alert(gameName);
    createXMLHttpRequest();
        var url = "AddWorthServlet?gameName="+gameName;
    XMLHttpReq.open("GET", url, true);
    XMLHttpReq.onreadystatechange = processResponse;//指定响应函数
    XMLHttpReq.send(null);  // 发送请求
    }
    </script>
    jsp页面
    <select id="gameName" name="gameName" size="1" onchange="chkWorth()">
    <option ......>游戏 </option>
    </select>
    <select id="worth" name="worth" size="1">
    </select>
    servlet
    public static String ISOToInnerCode(String str) { 
    if (str == null) 
    return null; 
    try { 
    str = (new String(str.getBytes("ISO-8859-1"), "gbk")).trim(); 
    } catch (Exception ex) { 

    return str; 
    }
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/plain; charset=gb2312");
    response.setHeader("Cache-Control","no-cache");
    PrintWriter out = response.getWriter();
    String gameName = ISOToInnerCode(request.getParameter("gameName").trim());
    // System.out.println(gameName);
    ManagerDao mDao = new ManagerDao();
    String worths = mDao.getWorthByGame(gameName);
    if(worths.equals("")  | | worths.equals(" ")){
    worths = "面额";
    }else{
    worths = "面额" + "," + worths;
    }
    out.println(worths);
    out.close();
    }
      

  6.   

    谢谢SwjComber!~
    我会用JSP+AJAX,但不会用JSF+AJAX.....