论坛首页 Java企业应用论坛

ECSide和Struts或者Struts2.0等MVC框架结合就出现问题!

浏览 10087 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-20  
java 代码
  1. /* Demo2Action.java  
  2.  * --------------------------------------  
  3.  * CREATED ON May 19, 2007 5:58:37 PM  
  4.  *  
  5.  * MSN ardenemily@msn.com  
  6.  * QQ 83058327(太阳里的雪)  
  7.  * MOBILE 13590309275  
  8.  * BLOG http://www.ugole.com  
  9.  *  
  10.  * ALL RIGHTS RESERVED BY ZHENUU CO,.LTD.  
  11.  * --------------------------------------  
  12.  */  
  13. package demo.classic.action;   
  14.   
  15. import java.util.List;   
  16.   
  17. import javax.servlet.http.HttpServletRequest;   
  18.   
  19. import org.apache.struts2.ServletActionContext;   
  20. import org.apache.struts2.interceptor.ServletRequestAware;   
  21. import org.ecside.util.RequestUtil;   
  22. import org.springframework.web.context.support.WebApplicationContextUtils;   
  23.   
  24. import com.opensymphony.xwork2.ActionSupport;   
  25.   
  26. import demo.classic.dao.UserInfoDAO;   
  27. import demo.common.CommonDictionary;   
  28.   
  29. /**  
  30.  *   
  31.  *   
  32.  * @author  
  33.  */  
  34. public class Demo2Action extends ActionSupport implements ServletRequestAware {   
  35.     //默认每页显示的记录条数   
  36.     private static int DEFAULT_PAGE_SIZE = 500;   
  37.     protected HttpServletRequest request;   
  38.        
  39.     @Override  
  40.     public String execute() throws Exception {   
  41.         System.out.println("++++++++++++++++++++++++");   
  42.         UserInfoDAO userInfoDAO = (UserInfoDAO) getBean("userInfoDAO");   
  43.         int totalRows = RequestUtil.getTotalRowsFromRequest(request);   
  44.         if (totalRows < 0) {   
  45.             // TODO : userInfoDAO.getAllUserInfoNumber()为能够取得总行数的方法,请替换为实际的实现。   
  46.             totalRows = userInfoDAO.getAllUserInfoNumber();   
  47.         }   
  48.         // 取得当前要查询的页面的记录起止行号。   
  49.         // 也可以使用 getRowStartEnd(HttpServletRequest request, int totalRows,int   
  50.         // defautPageSize,int offset)   
  51.         // 下面这个方法从0开始计算行数 上面的方法可以指定从几开始 ORACLE数据库一般是从1开始的,HSQLDB是从0开始.   
  52.         int[] rowStartEnd = RequestUtil.getRowStartEnd(request, totalRows,   
  53.                 DEFAULT_PAGE_SIZE);   
  54.         // Limit limit=RequestUtil.getLimit(request, "ec", totalRows,   
  55.         // DEFAULT_PAGE_SIZE);   
  56.         // Sort sort=limit.getSort();   
  57.         // sort.getProperty();   
  58.         // sort.getSortOrder();   
  59.         //         
  60.   
  61.         // TODO : userInfoDAO.getAllUserInfo(rowStartEnd[0], rowStartEnd[1])   
  62.         // 为查询记录的方法,请替换为实际的实现。rowStartEnd[0], rowStartEnd[1]为起止行   
  63.         // rowStartEnd[0], rowStartEnd[1] 左闭 右开   
  64.         List rslist = userInfoDAO.getSomeUserInfo(rowStartEnd[0], rowStartEnd[1]);   
  65.   
  66.         request.setAttribute("recordList", rslist);   
  67.   
  68.         request.setAttribute("GENDER_MAP", CommonDictionary.GENDER);   
  69.         request.setAttribute("USERROLE_MAP", CommonDictionary.USERROLE);   
  70.            
  71.         System.out.println("---------------------------");   
  72.         return SUCCESS;   
  73.     }   
  74.   
  75.   public Object getBean(String beanName){   
  76.     Object bean=null;   
  77.        
  78.     bean=WebApplicationContextUtils.getRequiredWebApplicationContext(ServletActionContext.getServletContext()).getBean(beanName);   
  79.     return bean;   
  80.   }   
  81.      
  82.     private static final long serialVersionUID = 1L;   
  83.   
  84.     public void setServletRequest(HttpServletRequest request) {   
  85.         // TODO Auto-generated method stub   
  86.         this.request = request;   
  87.     }   
  88.   
  89. }  

struts.xml

xml 代码
  1. <!---->xml version="1.0" encoding="UTF-8" ?>  
  2. <!---->
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5.   
  6. <struts>  
  7.     <package name="demo" extends="struts-default">  
  8.         <action name="demo2" class="demo.classic.action.Demo2Action">      
  9.             <result name="success" type="dispatcher">/demo2Action.jspresult>         
  10.         action>      
  11.     package>  
  12. struts>  

<!---->

java 代码
  1. <%@ page language="java" contentType="text/html;charset=UTF-8" %>   
  2. <%@ taglib uri="http://www.extremecomponents.org" prefix="ec" %>   
  3. <%@ page import="demo.TestData"  %>   
  4. <%@ page import="demo.common.CommonDictionary"  %>   
  5.   
  6. <%   
  7.   
  8. String webapp=request.getContextPath();   
  9.   
  10. %>   
  11.   
  12. <html>   
  13.   
  14. <head>   
  15. <jsp:include page="common_head.jsp" flush="true" />   
  16.   
  17. <script type="text/javascript">   
  18.   
  19. function init(){   
  20.   
  21. top.document.title=top.document.title+" how long : "+(new Date().getTime()-startTime);   
  22.   
  23. }   
  24. var startTime=new Date().getTime();   
  25.   
  26.   
  27. </script>   
  28. </head>   
  29.   
  30. <body style="margin:15px;" onload="init()">   
  31.   
  32.   
  33. <ec:table items="recordList" var="record"    
  34.   
  35. useAjax="true"  
  36. doPreload="true"  
  37.   
  38. action="${pageContext.request.contextPath}/demo2.go"  
  39.   
  40. title="用户列表"    
  41.   
  42. xlsFileName="用户列表.xls"    
  43. csvFileName="用户列表.csv"    
  44. minColWidth="80"    
  45. maxRowsExported="10000000"    
  46. pageSizeList="10,20,50,100,500,1000"    
  47.   
  48. editable="true"    
  49.   
  50. retrieveRowsCallback="process"    
  51. sortable="true"    
  52.   
  53. rowsDisplayed="20"    
  54.   
  55. generateScript="true"    
  56.   
  57. resizeColWidth="true"    
  58.   
  59. classic="true"    
  60.   
  61. filterable="true"    
  62.   
  63. width="100%"    
  64.   
  65. height="277px"    
  66.   
  67. minHeight="200"     
  68.   
  69. listWidth="100%"    
  70. >   
  71. <ec:row  recordKey="${record.USERID}" rowId="rowid_${GLOBALROWCOUNT}" >   
  72.         <ec:attribute>title="${record.USERNAME}"</ec:attribute>   
  73. <ec:column width="50" property="_0" title="序号"  editable="false" resizeColWidth="false" >${GLOBALROWCOUNT}</ec:column>   
  74. <ec:column width="26" title="&#160;"  property="_1" viewsAllowed="html" resizeColWidth="false"  
  75. cell="shadowRow" tipTitle="点击查看个人简介"    
  76.  />   
  77.   
  78.     <ec:column width="80" property="USERROLE" title="角色" editTemplate="ecs_t_role" mappingItem="USERROLE_MAP" />   
  79.     <ec:column width="120" property="USERNAME" title="用户名" editable="false"     
  80.         style=" #_EX:VAR.USERID>5 && VAR.USERID<15?'color:red':'' " />   
  81.     <ec:column width="100" property="PASSWD" title="密码"  />   
  82.     <ec:column width="120" property="EMAIL" title="电子信箱" />   
  83.     <ec:column width="70" property="GENDER" title="性别"  editTemplate="ecs_t_gender" mappingItem="GENDER_MAP"   />   
  84.     <ec:column  width="70"  property="USERID" title="编号" editable="false" resizeColWidth="false" format="0.00" calc="average,total" calcTitle= "平均,合计" calcSpan="2" >   
  85. #_EX:   
  86. // 新特性,支持动态脚本语言(js):   
  87. // USERID大于 5 小于 15的 使用红色显示   
  88. // 你可以和 property="USERNAME" 列的 style做下对比,两种方式都可以实现类似的效果,您可以自由选择.   
  89.   
  90. if ( VAR.USERID>5 && VAR.USERID<15) {   
  91.     return '<font color=red>'+VAR.USERID+'</font>'   
  92. else {   
  93.     return VAR.USERID;   
  94. }   
  95.     </ec:column>   
  96.   
  97. </ec:row>   
  98.   
  99. </ec:table>   
  100.        
  101.   
  102.   
  103.   
  104. <!-- 编辑通用的文本框模板 -->   
  105. <textarea id="ecs_t_input" rows="" cols="" style="display:none">   
  106.     <input type="text" class="inputtext" value="" onblur="ECSideUtil.updateEditCell(this)"    
  107.      style="width:100%;" name="" />   
  108. </textarea>   
  109.   
  110. <!-- 编辑性别所用模板 -->   
  111. <textarea id="ecs_t_gender" rows="" cols="" style="display:none" >   
  112.     <select onblur="ECSideUtil.updateEditCell(this)"  
  113.     style="width:100%;" name="GENDER" >   
  114. <ec:options items="GENDER_MAP" />   
  115.     </select>   
  116. </textarea>   
  117.   
  118. <!-- 编辑角色所用模板 -->   
  119. <textarea id="ecs_t_role" rows="" cols="" style="display:none" >   
  120.     <select onblur="ECSideUtil.updateEditCell(this)"  
  121.     style="width:100%;" name="USERROLE" >   
  122. <ec:options items="USERROLE_MAP" />   
  123.     </select>   
  124. </textarea>   
  125.   
  126.   
  127. <!-- 新建记录所用模板 -->   
  128. <textarea id="add_template" rows="" cols="" style="display:none">   
  129. &#160;   
  130. <tpsp />   
  131. &#160;   
  132. <tpsp />   
  133.     <select style="width:100%;" name="USERROLE" >   
  134. <ec:options items="USERROLE_MAP" />   
  135.     </select>   
  136. <tpsp />   
  137. <input type="text" name="USERNAME" class="inputtext" value="" />   
  138. <tpsp />   
  139. <input type="text" name="PASSWD" class="inputtext" value="" />   
  140. <tpsp />   
  141. <input type="text" name="EMAIL" class="inputtext" value="" />   
  142. <tpsp />   
  143.     <select style="width:100%;" name="GENDER" >   
  144. <ec:options items="GENDER_MAP" />   
  145.     </select>   
  146. <tpsp />   
  147. &#160;   
  148. </textarea>   
  149.   
  150. </body>   
  151. </html>  

 

以上是我测试使用的代码,发现ECSide只要跟这些MVC框架结合使用的时候就会出现跳转不过去,当第一次使用:
http://localhost:8080/demo2.go的时候列表数据能够显示出来,但是当我点击下一页或者排序的时候等等操作完全都没用,只会在顶部显示“正在提交”就没反应了,当然Action还是会执行的,但就是展现层显示的时候没有变化。虽然我采用的是Struts2.0,但同样发现使用Struts1.x也是有同样的问题,不知道fins有没有测试过类似这样的例子,以前ECSide1.x里面是有这样的例子,但有人反应以前的版照样有这个问题出现。

   发表时间:2007-05-20  
跟struts结合肯定没问题 我们项目就是这么做的
struts2 我还没接触过 稍后研究一下
0 请登录后投票
   发表时间:2007-05-20  
ajax 有问题,useAjax="true" 改为 useAjax="false"可以暂时解决你的问题,不过这样设置就不能用ajax特性了。
0 请登录后投票
   发表时间:2007-05-20  
useAjax="false"也试过了,不行!struts 1.x我也试过,确实是不行!

fins说你项目有这样示例,能否给几个例子看看!
0 请登录后投票
   发表时间:2007-05-20  
我用Struts2框架遇到这样一个小问题。
保存后“正在提交...”提示信息一直存在。
保存好之后仍存在。
0 请登录后投票
   发表时间:2007-05-20  
Arden 写道
useAjax="false"也试过了,不行!struts 1.x我也试过,确实是不行!

fins说你项目有这样示例,能否给几个例子看看!


retrieveRowsCallback="process"====>retrieveRowsCallback="limit"
useAjax="true"====>useAjax="false"  
doPreload="true"====>doPreload="false"

我也使用struts 2,原来也遇到过同样问题,这样改就ok了。注意数据库端分页retrieveRowsCallback使用limit.  
0 请登录后投票
   发表时间:2007-05-20  
OldWen 写道
Arden 写道
useAjax="false"也试过了,不行!struts 1.x我也试过,确实是不行!

fins说你项目有这样示例,能否给几个例子看看!


retrieveRowsCallback="process"====>retrieveRowsCallback="limit"
useAjax="true"====>useAjax="false"  
doPreload="true"====>doPreload="false"

我也使用struts 2,原来也遇到过同样问题,这样改就ok了。注意数据库端分页retrieveRowsCallback使用limit.  


谢谢,刚试过了,确实可以!那如果不用ajax的话,象那些直接在列表进行修改数据,能不能用?
0 请登录后投票
   发表时间:2007-05-20  
当然不能用,自己跟踪一下当使用ajax时,问题出现在哪里?,如果有结果麻烦告诉我一下,谢谢!
0 请登录后投票
   发表时间:2007-05-20  
mappingItem时遇到这样一个问题。
如User表有一字段work_id(Work是另一个表,与User表一对一关系)
Action中workMap=manageWorkDao.getAll();
那在页面显示下拉
<ec:column width="70" property="work.name" title="职业"  editTemplate="ecs_t_work" mappingItem="workMap"   />

这样怎样保存数据?

以上只是举的一个例。
0 请登录后投票
   发表时间:2007-06-04  
的确我的情况也这样,和struts结合就出了问题,改成userAjax="false",就OK了,还没搞清楚是怎么回事
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics