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

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

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

    Aaronlong31

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      12 Posts :: 3 Stories :: 17 Comments :: 0 Trackbacks
    錯誤信息:出現(xiàn)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,并把它對應(yīng)的值"zhangsan"存放到user的username屬性上
    方法1失敗是因為傳的名值對是:"user":"{'username':'zhangsan','password','123'}",這樣struts就會你要將"{'username':'zhangsan','password','123'}"這個字符串賦值給user對象,它就會調(diào)用setUser(String user)方法(或者是setUser(String[] user)),由于UserAction中沒有這個方法,所以會報錯。

    解決方法:
    根據(jù)jsonplugin官方的文檔,頁面?zhèn)魅氲恼埱蟮腸ontent-type要是application/json,否則json的interceptor不會幫你將json轉(zhuǎn)換為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"/>
    還要設(shè)置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攔截器才會幫你做轉(zhuǎn)換。

    還有,如果UserAction中有個userService的話,需要設(shè)置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 閱讀(12632) 評論(17)  編輯  收藏

    Feedback

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

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

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



      回復(fù)  更多評論
      

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

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

    # re: 關(guān)于用jquery傳遞json給struts2中的復(fù)雜對象的方法[未登錄] 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"/>
    這是在哪配置的啊  回復(fù)  更多評論
      

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

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

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

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

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

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

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

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

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

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

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

    # re: 關(guān)于用jquery傳遞json給struts2中的復(fù)雜對象的方法[未登錄] 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)  回復(fù)  更多評論
      

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


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产国产人免费人成免费视频| 啦啦啦中文在线观看电视剧免费版| 国产精品色午夜免费视频| 亚洲av极品无码专区在线观看| 免费精品国产自产拍在线观看图片| 亚洲1区1区3区4区产品乱码芒果| 午夜视频免费观看| 亚洲女初尝黑人巨高清| 久久免费观看国产精品88av| 永久免费观看的毛片的网站| 久久99国产亚洲高清观看首页| 久久99青青精品免费观看| 亚洲国产成人九九综合| 边摸边吃奶边做爽免费视频网站 | 亚洲第一se情网站| 久久亚洲国产精品五月天婷| 日韩精品无码免费一区二区三区| 亚洲中文字幕久在线| 日本中文一区二区三区亚洲| 久久国产亚洲高清观看| 成人免费无码大片A毛片抽搐色欲| 美女被艹免费视频| 亚洲va久久久噜噜噜久久天堂| 日韩精品成人无码专区免费| h视频在线观看免费| 亚洲AV无码一区二三区| 中国一级特黄的片子免费 | 一级做a爰性色毛片免费| 久久亚洲AV无码精品色午夜| 伊人久久亚洲综合| 国产精品另类激情久久久免费| 69视频免费在线观看| 国产裸体美女永久免费无遮挡| 亚洲国产免费综合| 久久不见久久见免费影院 | 久久久久亚洲AV综合波多野结衣| 最近中文字幕mv手机免费高清| 十八禁无码免费网站| 久久久免费观成人影院| 色屁屁www影院免费观看视频| 亚洲真人无码永久在线观看|