posts - 14, comments - 22, trackbacks - 0, articles - 4
            BlogJava :: 首頁 ::  :: 聯系 :: 聚合  :: 管理

          接著上次的話題,下面的就是學生注冊時需要的學院,專業,班級,三層列表,
          學院:
          <html:select property="instituteId" onchange="getDepartments(this.value)">
          ?????<html:options collection="institutes" property="value" labelProperty="label"/>
          ????</html:select>

          專業:
          <html:select property="departmentId" styleId="department" onchange="getClasses(this.value)"></html:select>
          班級:
          <html:select property="classId" styleId="classid" ></html:select>

          學院是上來就應該有的,我們把他放到了LabelValueBean里
          public Vector<LabelValueBean> getInstitutes()
          ??? {
          ??????? Connection connection = null;
          ??????? PreparedStatement pstmt = null;
          ??????? ResultSet rs = null;
          ??????? try
          ??????? {
          ??????????? connection = getConnection();
          ??????????? pstmt = connection.prepareStatement( "select * from institute" );
          ??????????? rs = pstmt.executeQuery();
          ??????????? Vector<LabelValueBean> institutes = new Vector<LabelValueBean>();
          ??????????? institutes.add( new LabelValueBean( "請選擇所在學院", "" ) );
          ??????????? while ( rs.next() )
          ??????????? {
          ??????????????? institutes.add( new LabelValueBean(
          ??????????????????????? rs.getString( "institute" ), rs.getString( "id" ) ) );
          ??????????? }
          ??????????? return institutes;
          ??????? }
          ??????? catch ( Exception e )
          ??????? {
          ??????????? e.printStackTrace();
          ??????? }
          ??????? finally
          ??????? {
          ??????????? close( rs );
          ??????????? close( pstmt );
          ??????????? close( connection );
          ??????? }
          ??????? return null;
          ??? }
          而當它選擇了一個學院后,相應的getDepartments(this.value)的js腳本就該工作了,還是四步
          var xmlHttp;
          function createXMLHttpRequest()
          {
          ?if (window.XMLHttpRequest)
          ?{
          ??xmlHttp = new XMLHttpRequest();
          ?}
          ?else if (window.ActiveXObject)
          ?{
          ??xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
          ??? }
          }
          發出請求
          function getDepartments(institute)
          {
          ?createXMLHttpRequest()
          ?var url = "ajax.do?institute="+institute+"&method=getDepartments"
          ?xmlHttp.open("GET",url, true)
          ?xmlHttp.onreadystatechange = departments
          ?xmlHttp.send(null)
          }
          處理響應
          function departments()
          {
          ?if (xmlHttp.readyState == 4)
          ?{
          ??if (xmlHttp.status == 200)
          ??{
          ???resText = xmlHttp.responseText
          ???each = resText.split("|")
          ???buildSelect( each, document.getElementById("departmentId"), "請選擇所在專業");
          ??}
          ?}
          }
          function buildSelect(str,sel,label)
          {
          ?sel.options.length=0;
          ?sel.options[sel.options.length]=new Option(label,"")
          ?for(var i=0;i<str.length;i++)
          ?{
          ??each=str[i].split(",")
          ??sel.options[sel.options.length]=new Option(each[0],each[1])
          ?}
          }
          我把從數據庫中得到的各個專業進行了編碼,之后再這里再回歸回去,下面的是編碼過程
          public StringBuffer getDepartmentsByInstituteIdForAjax( Long instituteId )
          ??? {
          ??????? Connection connection = null;
          ??????? PreparedStatement pstmt = null;
          ??????? ResultSet rs = null;
          ??????? try
          ??????? {
          ??????????? connection = getConnection();
          ??????????? pstmt = connection
          ??????????????????? .prepareStatement( "select * from department where instituteID=?" );
          ??????????? pstmt.setLong( 1, instituteId );
          ??????????? rs = pstmt.executeQuery();
          ??????????? StringBuffer sb = new StringBuffer();
          ??????????? while ( rs.next() )
          ??????????? {
          ??????????????? sb.append( rs.getString( "department" ) + ","
          ??????????????????????? + rs.getLong( "id" ) );
          ??????????????? if ( !rs.isLast() ) sb.append( "|" );
          ??????????? }
          ??????????? return sb;
          ??????? }
          ??????? catch ( Exception e )
          ??????? {
          ??????????? e.printStackTrace();
          ??????? }
          ??????? finally
          ??????? {
          ??????????? close( rs );
          ??????????? close( pstmt );
          ??????????? close( connection );
          ??????? }
          ??????? return null;
          ??? }
          當然這些都是由
          public ActionForward getDepartments( ActionMapping mapping,
          ??????????? ActionForm form, HttpServletRequest req, HttpServletResponse res )
          ??????????? throws Exception
          ??? {
          ??????? Service service = getService();
          ??????? res.getWriter().write(
          ??????????????? service.getDepartmentsByInstituteIdForAjax(
          ??????????????????????? Long.parseLong( req.getParameter( "institute" ) ) )
          ??????????????????????? .toString() );
          ??????? return null;
          ??? }
          來控制

          ===========班級的再這里
          public ActionForward getClasses( ActionMapping mapping, ActionForm form,
          ??????????? HttpServletRequest req, HttpServletResponse res ) throws Exception
          ??? {
          ??????? Service service = getService();
          ??????? res.getWriter().write(
          ??????????????? service.getClassesByDepartmentIdForAjax(
          ??????????????????????? Long.parseLong( req.getParameter( "department" ) ) )
          ??????????????????????? .toString() );
          ??????? return null;
          ??? }


          public StringBuffer getClassesByDepartmentIdForAjax( Long departmentId )
          ??? {
          ??????? Connection connection = null;
          ??????? PreparedStatement pstmt = null;
          ??????? ResultSet rs = null;
          ??????? try
          ??????? {
          ??????????? connection = getConnection();
          ??????????? pstmt = connection
          ??????????????????? .prepareStatement( "select * from class where departmentID=?" );
          ??????????? pstmt.setLong( 1, departmentId );
          ??????????? rs = pstmt.executeQuery();
          ??????????? StringBuffer sb = new StringBuffer();
          ??????????? while ( rs.next() )
          ??????????? {
          ??????????????? sb.append( rs.getString( "class" ) + "," + rs.getLong( "id" ) );
          ??????????????? if ( !rs.isLast() ) sb.append( "|" );
          ??????????? }
          ??????????? return sb;
          ??????? }
          ??????? catch ( Exception e )
          ??????? {
          ??????????? e.printStackTrace();
          ??????? }
          ??????? finally
          ??????? {
          ??????????? close( rs );
          ??????????? close( pstmt );
          ??????????? close( connection );
          ??????? }
          ??????? return null;
          ??? }

          function getClasses(department)
          {
          ?createXMLHttpRequest()
          ?var url = "ajax.do?department="+department+"&method=getClasses"
          ?xmlHttp.open("GET",url, true)
          ?xmlHttp.onreadystatechange = classes
          ?xmlHttp.send(null)
          }

          function classes()
          {
          ?if (xmlHttp.readyState == 4)
          ?{
          ??if (xmlHttp.status == 200)
          ??{
          ???resText = xmlHttp.responseText
          ???each = resText.split("|")
          ???buildSelect( each, document.getElementById("classid"), "請選擇所在班級");
          ??}
          ?}
          }


          評論

          # re: 體驗Struts(4)---用ajax實現三級下拉列表   回復  更多評論   

          2006-06-07 15:35 by 千山鳥飛絕
          不錯,好文章

          # re: 體驗Struts(4)---用ajax實現三級下拉列表   回復  更多評論   

          2007-06-22 14:30 by zhanglei
          功能可以實現但是提交出現異常:
          javax.servlet.jsp.JspException: Cannot find bean GetAddInfo in any scope

          at org.apache.struts.util.RequestUtils.lookup(RequestUtils.java:938)

          at org.apache.struts.taglib.html.OptionsCollectionTag.doStartTag(OptionsCollectionTag.java:219)

          at jsp_servlet.__rorder_add._jspService(__rorder_add.java:377)


          at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)

          問題就出在:<html:options collection="issue_type" property="value" labelProperty="label"/>標簽 提交不過去。formbean已經執行完了,但是action.do的excute方法沒有執行到。。不知道如何解決

          # re: 體驗Struts(4)---用ajax實現三級下拉列表   回復  更多評論   

          2008-08-08 09:17 by sunhe
          有沒有工程發下

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          有事在這里給我留言噢!
          主站蜘蛛池模板: 泽普县| 城固县| 罗城| 临桂县| 乐陵市| 塘沽区| 涡阳县| 江口县| 彭州市| 稻城县| 剑阁县| 炎陵县| 宜城市| 上饶市| 永春县| 临西县| 白水县| 晴隆县| 漯河市| 北票市| 武穴市| 永清县| 宜昌市| 沙田区| 金山区| 宜宾市| 阜康市| 贵溪市| 四会市| 西城区| 喀喇沁旗| 泸定县| 蒙山县| 潞西市| 岳普湖县| 沧州市| 千阳县| 三台县| 怀集县| 六安市| 洪洞县|