2015-07-02 4 views
1

Я пытаюсь удалить свой класс действий из своего JSP с помощью кнопки, чтобы обновить textarea. В режиме отладки я не ударяю свой класс действий.Вызов класса Action с JSP-страницы с использованием AJAX

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"; 
} 

} 

я получил, насколько я мог бы использовать другие примеры из StackOverFlow, я получаю 2 предупреждения, а затем получаю «Ничего не найдено .. !! оповещения. Любая идея, что я пропал или смотрю?

+2

Похоже, вы не понимаете, как работают вещи. Не торопитесь и прочитайте несколько руководств. –

ответ

1

В Struts 2 действие сопоставляется методу, а в конфигурации метод loadDefineScreen используется для сопоставления действия, но он отсутствует в классе действий.

Ошибки в javascript, объект json, возвращаемый Struts, не является массивом, поэтому он не имеет атрибута length. Параметр root в результате недействителен, и для получения свойства действия вам необходимо удалить этот параметр или использовать значение #action. Этот параметр используется по умолчанию.

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

JQuery val() функция без аргумента не может быть использован, чтобы установить значение элемента. Проверьте правильность синтаксиса на исходном сайте.

+0

Благодарю вас за помощь. Я получил ее на работу :) – Danno

0

ваш URL Шоуда только

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> 
+0

NO. Единственная правильная точка в OP использует '' для построения URL. –

+0

url: 'ajaxRefreshDefineTextArea', будет работать, я использую то же самое – xrcwrn

+0

Это ** может ** работать, но с использованием '' тега для построения URL-адреса лучше. –

Смежные вопросы