<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Aaronlong31

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      12 Posts :: 3 Stories :: 17 Comments :: 0 Trackbacks
    錯誤信息:出現java.lang.NoSuchMethodException setUser([LJava.lang.String;)異常

    struts2中的UserAction:
     1 public class UserAction{
     2 private User user;
     3 private String name;
     4 public void setName(String name){
     5 this.name = name;
     6 }
     7 public String getName(){
     8 return name;
     9 }
    10 public User getUser() {
    11       return user;
    12 }
    13 
    14 
    15 public void setUser(User user) {
    16       this.user = user;
    17 }
    18 
    19 public String execute(){
    20      System.println(user.getUsername);
    21 }
    22 
    23 }
    24 
    User就兩個屬性:username/password.
    這個是開始的struts.xml中的代碼:
    <package name="json" extends="json-default">  
         
    <action name="save" class="com.aaron.example.action.UserAction">  
        
    <result type="json"></result>  
         
    </action>  
    </package>  
    這個是jQuery代碼:
    $(function(){   
         
    var json = {"user":{"username":"zhangsan","password":"123"}};//方法1   
         //json = {"name":"zhanglong"};// 方法2    
         //json = {"user.username":"zhangsan","user.password":123};//方法3   
    }
    ); 
     用方法1會出項上述錯誤,方法2和方法3都可行。

    原因:
    方法2成功的原因是{"name":"zhanglong"}傳遞的是一個名值對,就像是request的parameter.
    方法3成功也是一樣的,struts2的OGNL會識別user.username,并把它對應的值"zhangsan"存放到user的username屬性上
    方法1失敗是因為傳的名值對是:"user":"{'username':'zhangsan','password','123'}",這樣struts就會你要將"{'username':'zhangsan','password','123'}"這個字符串賦值給user對象,它就會調用setUser(String user)方法(或者是setUser(String[] user)),由于UserAction中沒有這個方法,所以會報錯。

    解決方法:
    根據jsonplugin官方的文檔,頁面傳入的請求的content-type要是application/json,否則json的interceptor不會幫你將json轉換為java對象,這里他忘了說明一點,jsonplugin中只是定義了json的interceptor,并沒有將其放入到package的攔截器棧中,還需要我們自己放入自己的package中。如下:
    1 <interceptors>
    2     <interceptor-stack name="myDefaultStack">
    3         <interceptor-ref name="json"/>
    4         <interceptor-ref name="defaultStack"/>
    5     </interceptor-stack>
    6 </interceptors>
    7     
    8 <default-interceptor-ref name="myDefaultStack"/>
    還要設置jquery的ajax請求的content-type和傳遞類型為"POST":
    1 $.ajax({
    2     type:"POST",
    3     data:jsonText,
    4     url:"save.action?number=" + Math.random(),
    5     contentType:"application/json"
    6 });
    其中jsonText如下:
    1 var jsonText = "{'user':{
    2         'username':'zhangsan',
    3         'password':'123'
    4     }
    5 }"
    注意,整個jsonText是個字符串,其中的名值對的名要用''包起來,否則會報異常,指出json格式不對。
    只有這樣做了后,json攔截器才會幫你做轉換。

    還有,如果UserAction中有個userService的話,需要設置action的result的param:
    1 <result type="json">
    2     <param name="excludeProperties">
    3              userService
    4     </param>
    5 </result>
    這樣就不會將userService進行序列化了,或者可以將action中的getUserService()方法去掉。

    如果user對象是從hibernate獲取的,可能得到的是一個代理對象,對其進行json序列化時會出錯。解決辦法是為User對象加上@Proxy(lazy=false)注解。
    posted on 2010-06-29 15:10 Aaronlong31 閱讀(12631) 評論(17)  編輯  收藏

    Feedback

    # re: 關于用jquery傳遞json給struts2中的復雜對象的方法 2010-06-29 23:29 freeman1984
    有這樣做的必要嗎,直接序列化一個對象成 對象.屬性傳過去 struts的ognl不就解決了,復雜了這樣。。。。  回復  更多評論
      

    # re: 關于用jquery傳遞json給struts2中的復雜對象的方法 2010-06-30 10:17 Aaronlong31
    @freeman1984
    我之前也是想這么做的,但有的對象很復雜,里面還嵌套了其他對象,還有List對象,若是用對象.屬性的話就會很復雜,jsonText看著很龐大。

    這只是我的觀點,歡迎討論。



      回復  更多評論
      

    # re: 關于用jquery傳遞json給struts2中的復雜對象的方法 2010-07-05 23:21 來如風
    一樓的辦法好,其實不管多復雜,你都要傳遞的  回復  更多評論
      

    # re: 關于用jquery傳遞json給struts2中的復雜對象的方法 2010-07-06 16:46 tipx
    其它只要做一個嘗試解析json對象的方法就可以了。
    在$.post前,將{user:{uname:'aa', sex:'f'}}解析成{'user.uname':'aa', 'user.sex':'f'}  回復  更多評論
      

    # re: 關于用jquery傳遞json給struts2中的復雜對象的方法[未登錄] 2012-05-16 10:23
    <interceptors>
    2 <interceptor-stack name="myDefaultStack">
    3 <interceptor-ref name="json"/>
    4 <interceptor-ref name="defaultStack"/>
    5 </interceptor-stack>
    6 </interceptors>
    7
    8 <default-interceptor-ref name="myDefaultStack"/>
    這是在哪配置的啊  回復  更多評論
      

    # re: 關于用jquery傳遞json給struts2中的復雜對象的方法 2012-05-16 10:26 Aaronlong31
    @林
    在struts2.xml中配置  回復  更多評論
      

    # re: 關于用jquery傳遞json給struts2中的復雜對象的方法[未登錄] 2012-05-16 11:02
    @Aaronlong31
    不行 配置了以后 ajax就出錯了 有例子嗎?謝謝了  回復  更多評論
      

    # re: 關于用jquery傳遞json給struts2中的復雜對象的方法[未登錄] 2012-05-16 11:16
    contentType:"application/json"
    我ajax加上這個就出錯了,不加不出錯但是,填充不上值  回復  更多評論
      

    # re: 關于用jquery傳遞json給struts2中的復雜對象的方法 2012-05-16 11:17 Aaronlong31
    @林
    之前的例子找不到了。
    加上contentType:"application/json" 這個出了什么錯?  回復  更多評論
      

    # re: 關于用jquery傳遞json給struts2中的復雜對象的方法[未登錄] 2012-05-16 11:54
    error : function(msg) {

    alert("error"+msg);
    }
    直接不到后臺,直接alert了  回復  更多評論
      

    # re: 關于用jquery傳遞json給struts2中的復雜對象的方法 2012-05-16 11:55 Aaronlong31
    @林
    你可以用firebug或者chrome查看請求和響應的內容  回復  更多評論
      

    # re: 關于用jquery傳遞json給struts2中的復雜對象的方法[未登錄] 2012-05-16 13:21
    @Aaronlong31
    用firebug看不到錯誤 后臺斷點直接就不執行 估計是配置的不對吧  回復  更多評論
      

    # re: 關于用jquery傳遞json給struts2中的復雜對象的方法[未登錄] 2012-05-16 13:27
    求例子  回復  更多評論
      

    # re: 關于用jquery傳遞json給struts2中的復雜對象的方法 2012-05-16 13:28 Aaronlong31
    @林
    晚上幫你弄個吧,你告訴我Q  回復  更多評論
      

    # re: 關于用jquery傳遞json給struts2中的復雜對象的方法[未登錄] 2012-05-16 13:38
    1282681868 謝謝了  回復  更多評論
      

    # re: 關于用jquery傳遞json給struts2中的復雜對象的方法[未登錄] 2012-05-16 15:47
    終于找到報錯信息了
    org.apache.struts2.json.JSONException: Input string is not well formed JSON (invalid char g)
    org.apache.struts2.json.JSONReader.buildInvalidInputException(JSONReader.java:155)
    org.apache.struts2.json.JSONReader.read(JSONReader.java:119)
    org.apache.struts2.json.JSONReader.read(JSONReader.java:74)
    org.apache.struts2.json.JSONUtil.deserialize(JSONUtil.java:162)
    org.apache.struts2.json.JSONUtil.deserialize(JSONUtil.java:188)
    org.apache.struts2.json.JSONInterceptor.intercept(JSONInterceptor.java:101)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:510)
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)  回復  更多評論
      

    # re: 關于用jquery傳遞json給struts2中的復雜對象的方法 2015-11-19 16:27 帥比
    我果然還是太菜,為何現在才看到  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 四虎成人精品一区二区免费网站| 国产hs免费高清在线观看| www.亚洲成在线| 免费日本黄色网址| 无码午夜成人1000部免费视频| 伊人久久五月丁香综合中文亚洲| 亚洲国产中文字幕在线观看 | 在线jyzzjyzz免费视频| av网站免费线看| 久久精品国产亚洲AV久| 色久悠悠婷婷综合在线亚洲| 99久久免费国产精品特黄| 一级黄色毛片免费看| 亚洲va精品中文字幕| 亚洲免费观看视频| 狼友av永久网站免费观看| 99久久99久久精品免费观看| 国产AV无码专区亚洲AV琪琪| 亚洲黄色免费观看| 国外亚洲成AV人片在线观看 | 亚洲?V无码乱码国产精品| 亚洲精品在线免费观看视频| 一道本不卡免费视频| 在线综合亚洲中文精品| 亚洲AV无码精品无码麻豆| 亚洲国产午夜中文字幕精品黄网站 | 亚洲理论在线观看| 亚洲区小说区图片区QVOD| 国产精品麻豆免费版| 无人在线观看免费高清视频 | 国产精品免费小视频| 黄+色+性+人免费| 任你躁在线精品免费| 成年网在线观看免费观看网址| 亚洲熟妇无码AV不卡在线播放| 亚洲综合婷婷久久| 久久亚洲综合色一区二区三区 | 亚洲AV中文无码字幕色三| 亚洲成?Ⅴ人在线观看无码| 最近免费中文字幕大全| 182tv免费观看在线视频|