<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官方的文檔,頁面?zhèn)魅氲恼埱蟮腸ontent-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看不到錯誤 后臺斷點直接就不執(zhí)行 估計是配置的不對吧  回復  更多評論
      

    # 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 帥比
    我果然還是太菜,為何現在才看到  回復  更多評論
      


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


    網站導航:
     
    主站蜘蛛池模板: 国产精品免费观看久久| 无码人妻精品中文字幕免费| 成年人免费观看视频网站| 亚洲高清日韩精品第一区| 在线免费观看你懂的| 亚洲精品一卡2卡3卡三卡四卡| 日韩在线永久免费播放| 亚洲精品综合一二三区在线 | 永久免费观看的毛片的网站| 中文字幕乱码亚洲无线三区| 日本黄页网站免费| 老司机福利在线免费观看| 亚洲无码精品浪潮| 日本在线看片免费| 亚洲精品第五页中文字幕| 成人免费无码大片A毛片抽搐| 鲁死你资源站亚洲av| 亚洲精品国精品久久99热| 一级成人生活片免费看| 亚洲成色在线综合网站| 亚洲精品国产免费| 亚洲成在人线aⅴ免费毛片| 一区二区三区亚洲视频| 成全视频高清免费观看电视剧| 精品亚洲成AV人在线观看| 女人被男人桶得好爽免费视频| 最新亚洲人成无码网站| 国产亚洲成av人片在线观看| 99精品视频在线视频免费观看| 中文无码亚洲精品字幕| 亚洲免费观看视频| 亚洲va中文字幕| 亚洲国产成人久久99精品| 成人免费一级毛片在线播放视频| 噜噜综合亚洲AV中文无码| 久久亚洲国产精品一区二区| 日本h在线精品免费观看| 国产精品亚洲二区在线| 亚洲视频在线视频| 国产成人精品123区免费视频| 999zyz**站免费毛片|