通过jquery实现ajax调用

要素:struts1

一、

1、test.jsp

<head>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
 <script type="text/javascript" src="<%=request.getContextPath()%>/jquery/DLC.js"></script>
 </head>

 

 

<html:form>

   <td width="150" align="left">

      <html:select property="makeName" styleId="makeName"  onchange="getYear('yearName','${pageContext.request.contextPath}/website/index.do?method=getYear&makeName='+this[this.selectedIndex].value)">
            <html:option value="Select..."/>
            <html:options property="makeName" labelProperty="makeName" collection="makeList"/>
           </html:select>

   </td>

 

 

<td width="150" align="left">
            <html:select property="yearName" onchange="getModel()" styleId="yearName">
             <html:option value="Select..."/>
             <html:options labelProperty="yearName" property="yearName" collection="yearList"/>            
            </html:select>
           </td>

</html:form>

 

 

2、DLC.js

function getYear(makeName,url){
 $.ajax({
  type:'post',
  url:url,
  success: function(html){$('#'+makeName).html(html);}
  });
}

 

3、Action

 

public ActionForward getYears(ActionMapping mapping,ActionForm form,HttpServletRequest request,
   HttpServletResponse response){
 
  String makeName = request.getParameter("makeName");
    
  List<String> years = idlcs.getYears(makeName,lanId);
  request.setAttribute("years", years);
  return mapping.findForward("getYears");
 }

 

4、getYears.jsp(以页面的方式返回结果)

 

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
 <%
 List<String> list = (List)request.getAttribute("years");
 for(String tm :list){
 %>
 <option value="<%=tm%>"><%=tm%></option>
 <%
 }
 %>

 

 改写3、4步,直接返回结果,不写jsp页面了

 

 public ActionForward getYears(ActionMapping mapping,ActionForm form,HttpServletRequest request,
   HttpServletResponse response){
 
  String makeName = request.getParameter("makeName");
  List<String> years = idlcs.getYears(makeName,lanId);
    
  response.setContentType("text/html");
  response.setHeader("Cache-Control", "no-cache");
  response.setCharacterEncoding("UTF-8");
  
  PrintWriter out = null;
  try {
   out = response.getWriter();
  
  for(String year:years){
   out.println("<option>"+year+"</option>");
  }
  out.close();
  } catch (IOException e) {
   e.printStackTrace();
  }finally{
   if(out!=null){
    out.close();
   }
  }
  return null;

 

 

 

二、<html:select>标签属性onchange里不支持<%=request.getContextPath()%>,支持EL表达式

struts-html.tld:

<tag>
<name>select</name>

<attribute>

...
<name>onchange</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>

...

</tag>

 

 

<#

Element : rtexprvalue
Defines if the nesting attribute can have scriptlet expressions as a value, i.e the value
 of the attribute may be dynamically calculated at request time, as opposed to a static
 value determined at translation time. #PCDATA ::= true | false | yes | no If not present
 then the default is "false", i.e the attribute has a static value

Data Type : #PCDATA

#>

 

 

**************************************************************************

实例:

1、在javascript中

var url1 = "<%=request.getContextPath()%>/admin/manageChangeRecord.do?method=checkSameVenderBySerialno";
   var oldCode = changeRecordInfoForm.oldCode.value;
   var newCode = changeRecordInfoForm.newCode.value;

$.ajax({
    url:url1,
     cache: false,
          dataType:"text",
          data:{code1:oldCode,code2:newCode},
          success: function(ret){//ret为服务器返回值
                     if(ret=="false"){
                      alert("换机的产品属于不同的分公司,不能换机");
                     }else{
                     document.forms[0].submit();
      document.getElementById("subid").disabled="disabled";
                     }
                 }
   });

 

服务器端:

public ActionForward checkSameVenderBySerialno(ActionMapping actionMapping,
   ActionForm actionForm, HttpServletRequest request,
   HttpServletResponse response) throws X431WebException {

 long oldVenderId = ...

 long newVenderId = ...
  ......

 

  //flag 为true时,表示换机的是同一个分公司的产品
  boolean flag = oldVenderId==newVenderId?true:false;
  try {
   PrintWriter pw = response.getWriter();
   pw.print(flag);
   pw.flush();
  } catch (IOException e) {
   e.printStackTrace();
  }
  return null;
 }

你可能感兴趣的:(JavaScript,html,jquery,jsp,Ajax)