struts2标签与freemarker标签语法区别
一、 取值
1、 一般取值
struts2:
${alterOrder.name?if_exists} 或 ${alterOrder.name?default('')} ?if_exists的意思:表示如果alterOrder.name的值存在就显示。 类似 if(xxx!=null) { 显示值 }
?default('')的意思:表示如果alterOrder.name的值存在就显示,不存在则显示空字符串(default括号里的值),类似 xxx!=null? xxx: 给个默认值
值得注意的是,为什么要加上 ?if_exists或?default('')呢?不加也是可以的,如${alterOrder.name}。但会有一个隐患,当alterOrder.name 为null的时候,页面会直接报错。这也是freemarker最大的不便。
然而这并不影响我们对它的喜爱!在使用的时候加个判断?if_exists,或者给个默认值?default('默认值')就可以了
2、 日期取值
struts2:
<#if alterOrder.replyDate?exists>${alterOrder.rep lyDate?datetime}#if> ---datetime: 会格式化成 yyyy-MM-dd HH:mm:ss ; date:会格式化成 yyyy-MM-dd 3、 数值取值 struts2: 4、 map取值 struts2: value='alterTypeDictMap[alterOrder.alterType].name'/> freemarker: <#if alterOrder.alterType?exists>${alterTypeDictMap.get(alterOrder.alterType).name}#if> ---前提是 alterTypeDictMap对象也存在,否则要在外边if上多加判断条件,如 <#if alterOrder.alterType?exists&& alterTypeDictMap?exists>#if> 5、 boolean取值 struts2: \ freemarker: true<#else>false#if>\ 6、 静态常量、静态方法取值 struts2: value=\ --静态常量 value=\\ --静态方法 freemarker: ${stack.findValue('@com.hz.platform.fm.core.consta nt.FlowConstant@STATUS_NO_REPORT')} --静态常量 ${stack.findValue('@com.hz.platform.sys.syslogin.context.SysLoginContext@getLoginUserName()')} --静态方法 7、 项目根目录 strtus2: <%=request.getContextPath()%>/ 或 freemarker: ${request.contextPath}/ 二、 判断 1、if判断 strtus2: test=\ //some code... freemarker: <#if alterOrder.approvalResult> //some code... #if> 2、if判断对象不为空 strtus2: test=\flowStatus!=null\#if> freemarker: <#if alterOrder.flowStatus?exists> 3、if...else判断 strtus2: test=\ //some code... //some code... freemarker: <#if alterOrder.approvalResult> //some code... #if>