2014-10-13 92 views
1

這裏我正在嘗試將Struts 2與JSON,jQuery和ajax集成它調用到動作類,但我沒有得到json響應。我添加了所有JSON插件和JSON-defult在struts-XMLStruts2 json和ajax集成不起作用

的Ajax功能

function callajax() { 
    alert(1); 
    $.getJSON('edituser.action', function(data) { 
     alert(data); 
    }); 
} 

Action類。

package com.hyva.accounts.master.useraccountsetup; 

import com.opensymphony.xwork2.ActionSupport; 

/** 
* 
* @author ranjeeth.g 
*/ 
public class MasterUserSetUpActionEdit extends ActionSupport { 

    private String username = "ranjith"; 
    private String password = "1234"; 
    private String fullname = "Ranjith"; 
    private String emailaddress = "Ranjith"; 
    private String telephone = "8762232246"; 

    @Override 
    public String execute() { 
//  System.out.println("session = " + session.isOpen()); 
     return "success"; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getFullname() { 
     return fullname; 
    } 

    public void setFullname(String fullname) { 
     this.fullname = fullname; 
    } 

    public String getEmailaddress() { 
     return emailaddress; 
    } 

    public void setEmailaddress(String emailaddress) { 
     this.emailaddress = emailaddress; 
    } 

    public String getTelephone() { 
     return telephone; 
    } 

    public void setTelephone(String telephone) { 
     this.telephone = telephone; 
    } 
} 

Struts的XML

<action name="edituser" class="com.hyva.accounts.master.useraccountsetup.MasterUserSetUpActionEdit"> 
      <result type="json"></result> 
    </action> 

更新代碼;

<?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="accounts" namespace="/" extends="hibernate-default,json-default">  
     <action name="login" class="com.hyva.accounts.userlogin.LoginAction" > 
      <interceptor-ref name="defaultStack"></interceptor-ref> 
      <result name="success">/index.jsp</result> 
      <result name="error">/login.jsp</result> 
      <result name="input">/login.jsp</result>   
     </action> 

     <action name="edituser" class="com.hyva.accounts.master.useraccountsetup.MasterUserSetUpActionEdit"> 
      <result type="json"></result> 
     </action> 

     <action name="userlist" class="com.hyva.accounts.master.useraccountsetup.MasterUserSetUpActionList"> 
      <result name="success">/setup_useracount_list.jsp</result> 
     </action> 

     <action name="adduser" class="com.hyva.accounts.master.useraccountsetup.MasterUserSetUpAction"> 
      <interceptor-ref name="jsonValidationWorkflowStack"/> 
      <result name="input">/setup_useracount_list.jsp</result> 
      <result name="success">/setup_useracount_list.jsp</result> 
     </action> 
     <action name="countryList" method="list" class="com.hyva.accounts.master.country.CountryAction"> 
      <result name="success">/setup_country_list.jsp</result> 
     </action> 
     <action name="addCountry" method="saveOrUpdate" class="com.hyva.accounts.country.CountryAction"> 
      <result name="success" type="redirect">countryList</result> 
     </action>   
    </package> 
</struts> 

如果調用此網址我得到

java.lang.NoClassDefFoundError: org/apache/commons/lang/xwork/StringUtils 
    org.apache.struts2.json.SerializationParams.<init>(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.executeResult(DefaultActionInvocation.java:361) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:265) 
    com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163) 
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
    com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249) 
    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) 
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
+0

你得到了什麼錯誤 – xrcwrn

+0

我打電話給這個URL我得到http:// localhost:8088/iAccountsWeb/edituser.action – user4135983

+0

使用相同版本的S2核心和插件罐。 –

回答

1

1)根據從here

2)你的包你的struts2的版本包括JSON應該延伸json-default如下

<package name="example1" extends="struts-default, json-default"> 
<action name="edituser" class="com.hyva.accounts.master.useraccountsetup.MasterUserSetUpActionEdit"> 
      <result type="json"></result> 
    </action> 
</package> 

3)檢查你的動作爲你的動作名稱在地址中的結果如下http://localhost:8080/edituser

它會顯示JSON響應瀏覽器。

+0

感謝您的重播這是我正在使用struts2-core-2.1.6.jar和struts2-json-plugin-2.1.8.1.jar,我已經更新了我的代碼,請看上面。 – user4135983

0

包括Apache的commons-lang-2.x.jar

然後,由於2.1.8發生了重大變化,請注意2.1.6與2.1.8的東西混合是真的,真的很不好

對所有struts庫使用相同的版本。 Struts-core,Struts-json,其他(如果有的話)(struts-spring-plugin,struts-config-browser-plugin,struts-junit-plugin等)。除了struts-jquery-plugin,frremarker和ognl之外的所有東西(這個順便說一句,必須根據Struts dependecies page中的規定選擇正確的版本)。

然後,由於安全問題(以及其他原因),嘗試升級到最新版本(2.3.16.3)是基本要求。如果你這樣做,那麼包括Apache的commons-lang-2.x.jar和Apache的commons-lang3-3.x.jar(如果只有後者是不夠的,由於遺留代碼)。由於它們處於不同的包裝中,它們可以共存。