【问题标题】:Call Action class from JSP page using AJAX使用 AJAX 从 JSP 页面调用 Action 类
【发布时间】:2015-07-02 19:52:13
【问题描述】:

我正在尝试通过单击按钮从我的 JSP 中访问我的操作类以刷新 textarea。在调试模式下,我没有击中我的动作类。

JSP 页面:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<sj:head/>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

</head>
<body>
    <s:form name="defineFileForm" action="selectDefine">
        <table class="formTable formContent">
            <tbody>

                <fieldset>
                    <legend>Choose the file type that best describes your data</legend>
                    
                    <label for="defineStartRowline">Start Data Preview at Row:</label>
                    <input id="defineStartRowline"  name="defineStartRowline" size="20" maxlength="50" style="visibility : visible" type="text" value="<s:property value='defineStartRowline'/>"/>
                    <input type="button" value="Refresh Data Preview" onclick="refreshTextArea()"/>
                    
                </fieldset>
                
                <fieldset>
                <legend>Data Preview</legend>
                
                <textarea rows="30" cols="50" wrap="off" readonly value="<s:property value='defineTextArea'/>"></textarea>
                
                </fieldset>

            </tbody>
        </table>
    </s:form>

    <script language="JavaScript">
        
        function refreshTextArea(){
            
            alert('Inside ajax call')
            
            var rowNumber = $('#defineStartRowline').val();
            
            alert(rowNumber)
            
            $.ajax({
                type : "GET",
                url: '<s:url namespace="/" action="ajaxRefreshDefineTextArea"/>',
                dataType : 'json',
                data : {'defineStartRowline' : rowNumber},
                success : function(result){
                  if (result != null && result.length > 0){
                    $("defineStartRowline").val() = result.defineStartRowline;
                  }
                },
                error : function(xhr, errmsg) {alert("Nothing found!!");}
            });    
        }
    </script>
</body>
</html>

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>
<constant name="struts.devMode" value="true" />
   <package name="fileimport" namespace="/" extends="struts-default, json-default">
      <action name="ajaxRefreshDefineTextArea" 
          class="com.Files.fileimport.FileImportAction" 
          method="loadDefineScreen">
            <result name="success" type="json">
                <param name="root">jsonData</param>
            </result> 
      </action>
        
   </package>
</struts>

动作类:

public class FileImportAction extends ActionSupport implements SessionAware{


private String defineStartRowline;
private String defineTextArea;

public String getDefineStartRowline() {
    return defineStartRowline;
}

public void setDefineStartRowline(String defineStartRowline) {
    this.defineStartRowline = defineStartRowline;
}

public String getDefineTextArea() {
    return defineTextArea;
}

public void setDefineTextArea(String defineTextArea) {
    this.defineTextArea = defineTextArea;
}

public String RefreshDefineTextArea()
{
   String tempRowNumber = defineStartRowline;
   
   if(!tempRowNumber.equals(""))
   {
       defineTextArea = "Hello There m8!";
   }
   
   
   return "success";
 }

}

我收到 2 个警报,然后收到 "Nothing found..!! 警报。知道我缺少什么或忽略了什么吗?

【问题讨论】:

  • 您似乎不了解事情的运作方式。花点时间阅读一些教程。

标签: javascript jquery ajax jsp struts2


【解决方案1】:

在 Struts 2 中,动作被映射到方法,而在配置中,方法loadDefineScreen 用于映射动作,但在动作类中不存在。

javascript有错误,Struts返回的json对象不是数组,所以没有length属性。结果中的root参数无效,要获取action的属性需要去掉这个参数或者使用#action值。默认使用该参数。

<result name="success" type="json"/>      

jQuery val() 没有参数的函数不能用于设置元素的值。检查参考站点上的正确语法。

【讨论】:

    【解决方案2】:

    你的网址应该是唯一的

    url: 'ajaxRefreshDefineTextArea',

    <script language="JavaScript">
    
            function refreshTextArea(){
    
                alert('Inside ajax call')
    
                var rowNumber = $('#defineStartRowline').val();
    
                alert(rowNumber)
    
                $.ajax({
                    type : "GET",
                    url: "ajaxRefreshDefineTextArea",
                    dataType : 'json',
                    data : {'defineStartRowline' : rowNumber},
                    success : function(result){
                      if (result != null && result.length > 0){
                        $("defineStartRowline").val() = result.defineStartRowline;
                      }
                    },
                    error : function(xhr, errmsg) {alert("Nothing found!!");}
                });    
            }
        </script>
    

    【讨论】:

    • 没有。 OP 中唯一正确的一点是使用 &lt;s:url&gt; 进行 url 构造。
    • url: 'ajaxRefreshDefineTextArea',我用同样的方法可以工作
    • 可能可以工作,但是使用&lt;s:url&gt;标签来构建网址会更好。
    • 这不是一个直接的网址。 OP 有很多错误/奇怪的东西,您建议应该将单个正确的东西更改为不太好的东西。
    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多