• struts2中使用json插件实现ajax交互


    json插件可以简单的实现ajax交互,避免了使用struts2-dojo-plugin.jar包时带来的struts2.x版本冲突问题。并且减少了使用ajax标签时需要的繁琐的配置包括web.xml中对dwr的servlet配置以及weib-inf下的dwr.xml文件的配置和多包的导入问题。最重要的是可以使用json这种数据交互格式可以将action中的状态信息格式化成json数据格式。然后返回到当前页面中,在当前页面中访问json对象中的属性,从而获得action中的所有状态信息。在是json时一定要注意按钮的单击事件触发的是js函数,通过js函数来将form提交到指定的action。此时并没有出现页面的跳转只是仍保留在当前页面。通过ajax内置的回调函数获得action执行数据。当数据从服务器响应完成返回到客户端时,客户端仍保留在当前请求页面。如果将提交按钮设置成submit 而不是普通的button那么在执行完所有的操作后,form会再次执行一次跳转到当前页面的空操作即刷新页面。这样就出现了执行结果在页面上瞬间闪过的bug。一定要避免这样的错误。

    jsp页面代码如下:

    <body>
       <s:form id="form1" name="testForm" method="post">
        <s:textfield name="field1" label="field1"></s:textfield><br/>
        <s:textfield name="field2" label="field2"></s:textfield><br/>
        <s:textfield name="field3" label="field3"></s:textfield><br/>
        <input type="button" value="submit" onclick="getClick();"/>
       </s:form>
        <s:div id="show">test</s:div>
        <script type="text/javascript" src="<%=basePath %>js/prototype-1.7.js"></script>
        <script type="text/javascript">
         function getClick(){
          var url='jsonAction.action';
          var params=Form.serialize('form1');
          var myAjax=new Ajax.Request(url,{
           method:'post',
           parameters:params,
           onComplete:processResponse,
           asynchronous:true
          
          });
          
         }
         function processResponse(request){
          document.getElementById("show").innerHTML=request.responseText;
         }
        </script>
      </body>

    action类代码如下:

    public class JsonAction extends ActionSupport {
     private String field1;
     private String field2;
     private String field3;
     private String costumName="custom";
     private Map map=new HashMap();
     private int ints[]={10,20};
     public String getField1() {
      return field1;
     }
     public void setField1(String field1) {
      this.field1 = field1;
     }
     public String getField2() {
      return field2;
     }
     public void setField2(String field2) {
      this.field2 = field2;
     }
     public String getField3() {
      return field3;
     }
     public void setField3(String field3) {
      this.field3 = field3;
     }
     public String getCostumName() {
      return costumName;
     }
     public void setCostumName(String costumName) {
      this.costumName = costumName;
     }
     public Map getMap() {
      return map;
     }
     public void setMap(Map map) {
      this.map = map;
     }
     public int[] getInts() {
      return ints;
     }
     public void setInts(int[] ints) {
      this.ints = ints;
     }
     @Override
     public String execute() throws Exception {
      
      map.put("name", "****");
      return SUCCESS;
     }
     

    }

    struts.xml配置文件如下:

    <struts>
     <constant name="struts.i18n.encoding" value="UTF-8"></constant>
     <package name="json" extends="json-default" namespace="/">
      <action name="jsonAction" class="com.inspur.action.JsonAction">
       <result name="success" type="json"></result>
      </action>
     </package>

    </struts>

    注意三点:ajax请求 发送时的数据编码必须是UTF-8

                extends继承的不在是struts-default包而是json-default包

                type=“json”并且在result标签中间没有跳转的视图资源

    web.xml配置文件中注意如下就可以了:

    <filter-mapping>
       <filter-name>struts2</filter-name>
       <url-pattern>*.jsp</url-pattern>
      </filter-mapping>

  • 相关阅读:
    378. Kth Smallest Element in a Sorted Matrix
    295. Find Median from Data Stream
    857. Minimum Cost to Hire K Workers
    373. Find K Pairs with Smallest Sums
    767. Reorganize String
    无序列表
    有序列表
    缩写
    设计者详细信息
    强调
  • 原文地址:https://www.cnblogs.com/moonfans/p/3224191.html
Copyright © 2020-2023  润新知