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


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲男人的天堂网站| 亚洲av无码专区在线观看素人| 国产成人A亚洲精V品无码| 日韩大片在线永久免费观看网站| 在线视频免费国产成人| 国产亚洲成在线播放va| 四虎永久免费地址在线网站 | 亚洲欧洲国产成人综合在线观看 | 免费看美女裸露无档网站| 亚洲av无码一区二区三区观看| 亚洲高清中文字幕免费| 亚洲日本在线电影| 亚洲AV无码专区日韩| A级毛片高清免费视频在线播放| 久久青青草原亚洲AV无码麻豆| 在线看无码的免费网站| 亚洲熟妇AV日韩熟妇在线| 国产小视频在线免费| 本道天堂成在人线av无码免费| 亚洲精品国产成人片| 成人在线免费看片| 亚洲av无码一区二区三区人妖| 四虎影视免费永久在线观看| 成人网站免费大全日韩国产| 亚洲黄色三级网站| 国产成人免费a在线视频色戒| 一个人看的免费视频www在线高清动漫 | 亚洲无线一二三四区| 国产精品嫩草影院免费| 一个人看的www免费在线视频| 亚洲ⅴ国产v天堂a无码二区| 日韩精品成人无码专区免费| 国产综合成人亚洲区| 久久亚洲国产伦理| 国产无遮挡又黄又爽免费视频| 91在线视频免费观看| 亚洲无吗在线视频| 日韩亚洲人成在线综合日本| 99在线精品免费视频九九视| 四虎精品免费永久免费视频| 亚洲黄色三级视频|