使用JSP、Struts2和jQueryAjax的相关下拉列表

使用JSP、Struts2和jQueryAjax的相关下拉列表,jquery,ajax,jsp,struts2,Jquery,Ajax,Jsp,Struts2,index.jsp <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>AJAX in Struts 2 using JSON and jQuery</title> <script src="js/jquery-1.8.2.js" type="text/javascript"></script> <script> $(docu

index.jsp

<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>AJAX in Struts 2 using JSON and jQuery</title>
<script src="js/jquery-1.8.2.js" type="text/javascript"></script>
<script>
$(document).ready(function() {
    $('#country').change(function(event) {
        var country = $("select#country").val();
        $.getJSON('ajaxAction', {
            countryName : country
        }, function(jsonResponse) {
            $('#ajaxResponse').text(jsonResponse.dummyMsg);
            var select = $('#states');
            select.find('option').remove();
            $.each(jsonResponse.stateMap, function(key, value) {
                $('<option>').val(key).text(value).appendTo(select);
            });
        });
    });
});
</script>
</head>
<body>
    <h3>AJAX calls to Struts 2 using JSON and jQuery</h3>
    <s:select id="country" name="country"
        list="{'Select Country','India','US'}" label="Select Country" />
    <br />
    <br />
    <s:select id="states" name="states" list="{'Select State'}"
        label="Select State" />
    <br />
    <br />
    <div id="ajaxResponse"></div>
</body>
</html>

Struts2中使用JSON和jQuery的AJAX
$(文档).ready(函数(){
$(“#国家”)。更改(功能(事件){
var country=$(“选择#国家”).val();
$.getJSON('ajaxAction'{
国家名称:国家
},函数(jsonResponse){
$('#ajaxsresponse').text(jsonResponse.dummymmsg);
变量选择=$(“#状态”);
select.find('option').remove();
$.each(jsonResponse.stateMap,函数(键,值){
$('').val(键).text(值).appendTo(选择);
});
});
});
});
使用JSON和jQuery对Struts2的AJAX调用




web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Struts2</display-name>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

支柱2
支柱2
org.apache.struts2.dispatcher.ng.filter.strutspreadexecutefilter
支柱2
/*
index.jsp
struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" extends="json-default">
    <action name="ajaxAction" class="com.action.AjaxJsonAction">
        <result type="json">/index.jsp</result>
    </action>
</package>
</struts>

/index.jsp
AjaxJsonAction.java

package com.action;

import java.util.LinkedHashMap;
import java.util.Map;
import com.opensymphony.xwork2.Action;
public class AjaxJsonAction implements Action{

    private Map<String, String> stateMap = new LinkedHashMap<String, String>();
    private String dummyMsg;
    //Parameter for Jquery
    private String countryName;

    public String execute() {
        if (countryName.equals("India")) {
            stateMap.put("1", "Kerala");
            stateMap.put("2", "Tamil Nadu");
            stateMap.put("3", "Jammu Kashmir");
            stateMap.put("4", "Assam");
        } else if (countryName.equals("US")) {
            stateMap.put("1", "Georgia");
            stateMap.put("2", "Utah");
            stateMap.put("3", "Texas");
            stateMap.put("4", "New Jersey");
        } else if (countryName.equals("Select Country")) {
            stateMap.put("1", "Select State");
        }
        dummyMsg = "Ajax action Triggered";
//      return SUCCESS;
        return "success";
    }

    public Map<String, String> getStateMap() {
        return stateMap;
    }

    public String getDummyMsg() {
        return dummyMsg;
    }

    public String getCountryName() {
        return countryName;
    }

    public void setStateMap(Map<String, String> stateMap) {
        this.stateMap = stateMap;
    }

    public void setDummyMsg(String dummyMsg) {
        this.dummyMsg = dummyMsg;
    }

    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }
}
package.com.action;
导入java.util.LinkedHashMap;
导入java.util.Map;
导入com.opensymphony.xwork2.Action;
公共类AjaxJsonAction实现操作{
私有映射stateMap=newlinkedhashmap();
私有字符串dummymmsg;
//Jquery的参数
私有字符串countryName;
公共字符串execute(){
如果(countryName.equals(“印度”)){
国家地图。put(“1”,“喀拉拉邦”);
stateMap.put(“2”,“泰米尔纳德邦”);
stateMap.put(“3”,“查谟-克什米尔”);
州地图。放置(“4”,“阿萨姆”);
}如果(countryName.equals(“US”)){
州地图。放置(“1”,“格鲁吉亚”);
州地图。put(“2”,“犹他州”);
stateMap.put(“3”,“德克萨斯”);
stateMap.put(“4”,“新泽西”);
}else if(countryName.equals(“选择国家”)){
stateMap.put(“1”,“选择状态”);
}
dummymmsg=“触发了Ajax操作”;
//回归成功;
返回“成功”;
}
公共映射getStateMap(){
返回状态图;
}
公共字符串getDummyMsg(){
返回dummymmsg;
}
公共字符串getCountryName(){
返回国家名称;
}
公共无效集合状态映射(映射状态映射){
this.stateMap=stateMap;
}
公共void setdummymmsg(字符串dummymmsg){
this.dummymmsg=dummymmsg;
}
public void setCountryName(字符串countryName){
this.countryName=countryName;
}
}
添加了jar引用

  • commons-fileupload-1.3.1.jar
  • commons-io-2.2.jar
  • commons-logging-1.1.3.jar
  • commons-logging-api-1.1.jar
  • freemarker-2.3.19.jar
  • javassist-3.11.0.GA.jar
  • ognl-3.0.6.jar
  • struts2-core-2.3.16.1.jar
  • xwork-core-2.3.16.1.jar
  • commons-lang-2.4.jar
  • commons-lang3-3.1.jar

  • struts2-json-plugin-2.1.8.1.jar 或

  • struts2-json-plugin-2.2.1.jar
错误堆栈如下所示:

 Jun 03, 2014 9:30:35 AM org.apache.catalina.core.StandardWrapperValve invoke
    SEVERE: Servlet.service() for servlet [default] in context with path [/JqueryJsonStruts2] threw exception [Filter execution threw an exception] with root cause
    java.lang.NoClassDefFoundError: org/apache/commons/lang/xwork/StringUtils
        at org.apache.struts2.json.SerializationParams.<init>(SerializationParams.java:57)
        at org.apache.struts2.json.JSONResult.writeToResponse(JSONResult.java:214)
        at org.apache.struts2.json.JSONResult.execute(JSONResult.java:204)
        at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:371)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275)
        at org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
        at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
        at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:562)
        at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
2014年6月3日上午9:30:35 org.apache.catalina.core.StandardWrapper
严重:路径为[/JqueryJsonStruts2]的上下文中Servlet[default]的Servlet.service()引发了带有根本原因的异常[Filter execution引发了异常]
java.lang.NoClassDefFoundError:org/apache/commons/lang/xwork/StringUtils
位于org.apache.struts2.json.SerializationParams.(SerializationParams.java:57)
位于org.apache.struts2.json.JSONResult.writeToResponse(JSONResult.java:214)
位于org.apache.struts2.json.JSONResult.execute(JSONResult.java:204)
在com.opensymphony.xwork2.DefaultActionInvocation.ExecuteSult(DefaultActionInvocation.java:371)
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275)
位于org.apache.struts2.interceptor.DeprecationInterceptor.interceptor(DeprecationInterceptor.java:41)
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
位于org.apache.struts2.interceptor.debug.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
在com.opensymphony.xwork2.intercept.DefaultWorkflowIntercept.doIntercept(DefaultWorkflowIntercept.java:167)
在com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)上
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
位于com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
位于org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
在com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)上
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
在com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
在com.opensymphony.xwork2.interceptor.parameters-sinterceptor.doIntercept(parameters-sinterceptor.java:249)
在com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)上
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
在com.opensymphony.xwork2.interceptor.parameters-sinterceptor.doIntercept(parameters-sinterceptor.java:249)
在com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)上
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
在com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInte
<struts.version>2.3.16</struts.version>

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-json-plugin</artifactId>
    <version>${struts.version}</version>
</dependency>