欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Struts2.1.8使用心得

程序员文章站 2022-06-11 12:06:24
...
这次的项目用到最新的Struts2.1.8,在用的过程中遇到了很多问题,在此一一记录。
一、jsonplugin0.34的问题
jsonplugin0.34在struts2.1.6后就有问题了,其核心原因是xwork在2.1.2版本后将com.opensymphony.xwork2.util.TextUtils去掉了,解决办法将这个类重新考到jsonplugin包里。

二、Struts2标签问题
个人对Struts标签实在不敢恭维,实在难用。在使用了simple主题后情况有所改观。不过,Struts2的flt模板也存在问题。比如checkboxlist:
The java code is :
<table border="0" cellspacing="1" width="100%" cellpadding="0"	class="contextRow">
    <s:checkboxlist cssClass="contextFieldData" name="delValueList" list="descList" listKey="tag_value_id" listValue="valueName" />
</table>
 
The rendered HTML code is:
 
<table border="0" cellspacing="1" width="100%" cellpadding="0" class="contextRow">
<tr>
    <td class="tdLabel"></td>
    <td>
       <input type="checkbox" name="delValueList" value="1311" id="delValueList-1"/>
      <label for="delValueList-1" class="checkboxLabel">16AP</label>
      <input type="checkbox" name="delValueList" value="294" id="delValueList-2"/>
      <label for="delValueList-2" class="checkboxLabel">ADRR</label>
      <input type="checkbox" name="delValueList" value="1312" id="delValueList-3"/>
      <label for="delValueList-3" class="checkboxLabel">AP16</label>
      <input type="checkbox" name="delValueList" value="296" id="delValueList-4"/>
      <label for="delValueList-4" class="checkboxLabel">BAT</label>
      <input type="checkbox" name="delValueList" value="295" id="delValueList-5"/>
      <label for="delValueList-5" class="checkboxLabel">CARP</label>
      <input type="checkbox" name="delValueList" value="248" id="delValueList-6"/>
      <label for="delValueList-6" class="checkboxLabel">EXER</label>
    </td>
</tr>
</table>

看见没,cssClass根本没显示,看了checkboxlist.ftl发现就是如此,在文件中添加如下部分就可以了
<#if parameters.cssClass??>
     class="${parameters.cssClass?html}"<#rt/>
</#if>


三、JFreeChart应用
由于这次项目需要有各种JFreeChart图输出,综合考虑采用如下方式Struts2.1.8使用心得
            
    
    博客分类: 开源框架 jfreechartJavaScriptStruts项目管理Google 
1.BaseAction是个基类,里面有常用的getSession()等的方法
2.JFreeChartChart是抽象基类,实现了JFreeChart各种图形的实现方式,提供getData()抽象方法用于子类实现
3.ExitChartAction其实是一个出口基类,通过传递图类型参数确定转向哪些子类
4.众多JFreeChartChart子类,实现getData()方法提供JFreeChart图形数据。

四、拦截器--日志管理
借鉴了网上一位仁兄的方法,具体在哪儿看到的记不清楚了,不过还是非常感谢这位仁兄。
        <interceptors>
            <interceptor name="myInterceptor"
                class="com.chiyu.action.admin.log.LoggerInterceptor">
            </interceptor>
            <interceptor-stack name="myStack">
                <interceptor-ref name="myInterceptor"></interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </interceptor-stack>
        </interceptors>
        <default-interceptor-ref name="myStack">
        </default-interceptor-ref>


...导入包略
public class LoggerInterceptor extends AbstractInterceptor {
    private IAdminOperationLogService adminOperationLogService;
    private IAdminService adminService;
    private static final long serialVersionUID = 1358600090729208361L;

    @SuppressWarnings("unchecked")
    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        System.out.println("日志拦截器已经开始启动..");
        String actionName = invocation.getAction().getClass().toString();
        invocation.invoke();
        final Map<String, Object> parameters = invocation
                .getInvocationContext().getParameters();
        boolean result = invocation.getProxy().getExecuteResult();
        String method = invocation.getProxy().getMethod();
        // 取得请求相关的ActionContext实例
        ActionContext ctx = invocation.getInvocationContext();

        HttpServletRequest request = ServletActionContext.getRequest();
        String ip = request.getRemoteAddr();
        Map session = ctx.getSession();
        // 取出名为user的session属性
        String name = (String) session.get(Admin.ADMIN_KEY);
        Admin admin = adminService.findAdminByAdminName(name);
        System.out.println(admin);
        if (admin != null) {
            Adminoperationlog adminLog = new Adminoperationlog();
            adminLog.setAdminId(admin.getAdminId());
            adminLog.setAdminName(name);
            adminLog.setDealTime(new java.sql.Date(System.currentTimeMillis()));
            adminLog.setOperationIp(ip);
            adminLog.setOperationSource(actionName + "---" + method + "---"
                    + parameters + "---" + result);
            adminOperationLogService.save(adminLog);
        }
        return Action.SUCCESS;
    }

    setter和getter略
}


五、OGNL语言
关于OGNL的概念可以google一下,我主要记录一些常用的用法
1.action中的某属性,有setter和getter,这种属性是最好表示的。其实就是request.getAttribute("xxx")或者request.getParameter("xxx");
表达方式${xxx},有人说javascript可以引用吗?答案是可以的
var a = ${xxx};//可以获得值

那如果在struts2标签里呢?也好说,这里举一个页面跳转的例子
<s:action name="xxx" namespace="/xxx" executeResult="true">
    <s:param name="pictureType" value="%{xxx}"></s:param>
</s:action>

2.<s:if test="" />中的判断条件,假设有个属性叫xxx
在test里可以写成xxx == 1或者%{#xxx == 1},但有一点要注意,如果是和字符串比较
xxx == 'a'这样是不行的一定要双引号xxx == "a"
3.其实还有很多应用,我在这就不一一列举了,大家可以一块商讨,下面附上OGNL参考手册奉献给大家。
  • Struts2.1.8使用心得
            
    
    博客分类: 开源框架 jfreechartJavaScriptStruts项目管理Google 
  • 大小: 21.3 KB