Java 使用 Jquery Ajax 将数据从 jsp 发送到 struts2 动作类

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/19408257/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 16:55:00  来源:igfitidea点击:

Sending data from jsp to struts2 action class using Jquery Ajax

javajqueryajaxjspstruts2

提问by sbala_20

I need to pass the form data from jsp to struts2 using jquery Ajax and receive back a JSON data from Struts2 action class. I have given the code below. When i am passing the AJAX data ,

我需要使用 jquery Ajax 将表单数据从 jsp 传递到 struts2,并从 Struts2 操作类接收回 JSON 数据。我已经给出了下面的代码。当我传递 AJAX 数据时,

url:'search.action?searchText='+ $('searchValue').value+'&environment='+$('environmentSelect').value

"undefined" is getting passed instead of the orijinal value from jsp to the action class.

“未定义”正在从 jsp 传递到操作类,而不是原始值。

My JSP

我的 JSP

 <div id="tab0">
                <s:form action="search" method="post">

                    <table style="margin-left: auto; margin-right: auto">
                        <tr>
                            <td>Environment:</td>
                            <td><select id="environmentSelect" name="environment">
                                    <option value="1">1</option>
                                    <option value="2">2</option>
                                    <option value="3">3</option>
                            </select></td>
                        </tr>
                        <tr>
                            <td>Search Value:</td>
                            <td><input id="searchValue" name="searchText" type="text" /></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td><button id="searchButton">Search</button></td>
                        </tr>
                    </table>
                </s:form>
            </div>

My Ajax function is:

我的 Ajax 函数是:

$("#searchButton").on("click",function(){

            console.log("Inside Ajax call = "+  $('#tab0'));

            $.ajax({
                type: 'POST',
                url:'search.action?searchText='+ $('searchValue').value+'&environment='+$('environmentSelect').value,
                dataType: 'json',
                success: function(data){
                    console.log(stringify(data));
                        s=data....
                        }

                    document.getElementById('displayLog').innerHTML=s;
            });

            return false;
        }); 

Struts.xml:

Struts.xml:

 <struts>
        <constant name="struts.enable.DynamicMethodInvocation"
            value="false" />
        <constant name="struts.devMode" value="true" />
        <constant name="struts.custom.i18n.resources"
            value="ApplicationResources" />
        <constant name="struts.convention.default.parent.package" value="default"/> 
        <constant name="struts.ui.theme" value="simple" />

        <package name="default" extends="struts-default" namespace="/">
            <action name="search" class="com.SearchAction" method="execute">
                <result name="success">/jsp/dummy.jsp</result>
                <result name="error">/jsp/search.jsp</result>
            </action>
        </package>  

    </struts>

Action Class:

动作类:

public class SearchAction extends ActionSupport {

  /**
   * 
   */
  private static final long serialVersionUID = 1L;


  private String environment;
  private String searchText;


    public String getEnvironment() {
        return environment;
    }

    public void setEnvironment(String environment) {
        System.out.println("environment in setter new = "+ environment);
        this.environment = environment;
    }

    public String getSearchText() {
        return searchText;
    }

    public void setSearchText(String searchText) {
        System.out.println("searchText in setter = "+ searchText);
        this.searchText = searchText;
    }



  public String execute() {

    Map map1 = new Map();
    if(environment !=null && searchText != null){
        map1= getMap(environment,searchText);
        return success;
    }
    else{
        return "error";
    }
}
}

I did not incorporate the JSON logic yet. Struck with the "undefined" part.

我还没有合并 JSON 逻辑。遇到了“未定义”的部分。

采纳答案by Keerthivasan

You need to use .val()function as below

您需要使用.val()如下功能

 $.ajax({
       type: 'POST',
       url:'search.action?searchText='+ $("#searchValue").val()+'&environment='+$("#environmentSelect").val(),
       dataType: 'json',
       success: function(data){
             console.log(stringify(data));
        }});

The other way is to

另一种方法是

 $.ajax({
          type: 'POST',
          url:'search.action?searchText='+ document.getElementById('searchValue').value  +'&environment='+document.getElementById('environmentSelect').value,
          dataType: 'json',
          success: function(data){
          console.log(stringify(data));
          }});

Hope this helps!

希望这可以帮助!

回答by Mohammed Hasan

Very Important (If you want to transfer data from Action Class to JQuery) without these 3 jar files you can not pass variable from Action Class to JQuery.

非常重要(如果您想将数据从 Action Class 传输到 JQuery),如果没有这 3 个 jar 文件,您将无法将 Action Class 中的变量传递给 JQuery。

  • json-simple-1.1.jar
  • struts2-json-plugin-2.3.1.2.jar
  • commons-lang-2.6.jar
  • json-simple-1.1.jar
  • struts2-json-plugin-2.3.1.2.jar
  • commons-lang-2.6.jar

Struts.xml

Struts.xml

<package name="json" namespace="/" extends="json-default">
   <action name="action_name" class="com.ActionClass" method="execute">
       <result type="json">
           <param name="root">jsonData</param>
       </result>
   </action>
</package>