`

struts2开发注意事项

阅读更多
一、struts2中JSP获取action属性值方法:
例如:action中有属性int age=0;jsp页面可以通过以下2中方式获取该属性值
方法1、<s:property value='fId'/>
方法2、${fId}
方法3、${list.size()}


二、如果action中有属性int age=0;jsp页面中使用if标签判断age是否为0时,可以使用以下方式判断:
<s:if test="#request.fId==0">正确</s:if>
判断对象属性:
<s:if test="#request.persion.age==1">

三、jsp中使用基本标签需要赋值时最好不要用struts2标签,用基本的html标签,否则容易报类型装换错误

四、标签
4.1、<s:select>标签
4.1.1、<s:select>标签替换版本
<select name="user.userId" id="userId">
<option value="">请选则用户</option>
<s:iterator value="userList" id="user_data" status="user_statu">
<s:if test="#user_data.userId==#request.user.userId">
<option value='<s:property value="#user_data.userId"/>' selected><s:property value="#user_data.userName"/></option>
</s:if>
<s:else>
<option value='<s:property value="#user_data.userId"/>'><s:property value="#user_data.userName"/></option>
</s:else>
</s:iterator>
</select>
说明:
userList为action中属性List<User> userList;
User.java中有属性Integer userId;String userName;
4.1.2、赋值
4.1.2.1、方法一
<s:select list="{'a1','a2','a3'}" name="abc" headerKey="" headerValue="--全部--"></s:select>
4.1.2.2、方法二
<s:select list="#{'a1':'a1','a2':'a2','a3':'a3'}" name="abc" headerKey="" headerValue="--全部--"></s:select>
注意:此方法中值不能为数字,数字后台接收不到值
4.1.2.3、设置默认值(用value属性)
<s:select list="#{'a1':'a1','a2':'a2','a3':'a3'}" name="abc" headerKey="" headerValue="--全部--" value="${abc}" ></s:select>
4.1.2.3、通过map赋值
Map myMap = new HashMap();
myMap.put("1","1月");
<s:select list=“myMap" name="abc" listKey="key" listValue="value"></s:select>


4.2、<s:if>判断
4.2.1、是否为null
<s:if test='#request.abc!=null'></s:if>
4.2.2、是否为空值
<s:if test='#request.abc!=""'></s:if>
4.2.3、不为null且不为空置
<s:if test='#request.abc!=null'>
  <s:if test='#request.abc!=""'>
  </s:if>
</s:if>
4.2.4、list里是否有值
<s:if test="null!=abclist&&abclist.size()>0">
4.2.5、判断list是否为空
<s:if test="null != list && 0 != list.size()">
</s:if>
4.2.6、多条件判断
<s:if test="abc==457||abc==458">
</s:if>

<s:if test="abc==457&&abc==458">
</s:if>
4.3.7、action中2个属性,a1和a2判断a1和a2是否相等
<s:if test="a1==a2">
</s:if>


4.3、<s:iterator>标签
4.3.1、截取并显示list里前3条记录
<s:subset source="weiList" start="1" count="3">
  <s:iterator  id="wl">
   <s:property value="#wl[0]"/>
   <s:property value="#wl[1]"/>
  </s:iterator>
</s:subset>

<s:subset source="weiList" start="1" count="3">
  <s:iterator>
   <s:property value="id"/>
   <s:property value="name"/>
  </s:iterator>
</s:subset>

4.3.2、取List<Object[]>内的对象数组元素
<s:iterator value="obj" id="object">
                  <tr>
                      <td><s:property value="#object[0]"/></td>
                      <td><s:property value="#object[1]"/></td>
                      <td><s:property value="#object[2]"/></td>
                      <td>
<s:if test="%{#object[3].length()>2}">       
      <s:property value="#object[3].substring(0,2)+'...'" />       
</s:if>
<s:else>       
         <s:property value="#object[3]" />       
</s:else>
</td>
                      <td><s:property value="#object[4]"/></td>
                      <td>
                   </tr>
</s:iterator>
4.3.3、嵌套循环 list中的list
<s:iterator id="list" value="infoList" status="sta">
<s:iterator id="info" value=“infoList[#sta.index]">
   <p>
    <a href="/expert/a/${info.infoId }.shtml" title="${info.subject }">
    <s:if test="subject.length()>=21">
        <s:property value='subject.substring(0,20)'/><b>. . .</b>
    </s:if>
    <s:else>
        ${info.subject }
    </s:else>
    </a>
    <span><s:date name="publicTime" format="yyyy-MM-dd" /></span>
   </p>
</s:iterator>
</s:iterator>
4.3.3.1、嵌套list比较内外属性值
<s:iterator id="wlist" value="infoLists" id="wid">
<s:iterator id="info" value=“infoList" id="nid">
<s:date name="#wlist.date" format="yyyy-mm-dd"/>
<s:if test="#wid.id==#nid.parentid">
有子节点
</s:if>  
</s:iterator>
</s:iterator>

4.3.4、限制循环次数,取前几条记录
<s:subset source="infoList[#sta.index]" start="0" count= "1" >
<!-- start,从第几个开始;count,总共显示几条 -->
    <s:iterator id="info">
    <p>
    <a href="/expert/a/${info.infoId }.shtml" title="${info.subject }">
    <s:if test="subject.length()>=21">
        <s:property value='subject.substring(0,20)'/><b>. . .</b>
    </s:if>
       <s:else>
        ${info.subject }
    </s:else>
    </a><span><s:date name="publicTime" format="yyyy-MM-dd" /></span>
        </p>
    </s:iterator>
</s:subset>
4.3.4、集合list 的长度
<s:property value="list.size"/><br/>
<s:property value="list.size()"/><br/>
<s:property value="#request.list.size"/><br/>
<s:property value="#request.list.size()"/><br/>
4.3.5、判断list是否为空
<s:if test="memExpertList == null || memExpertList.size <= 0">
      <tr><td align="center" colspan="3" height="23"><font color="red"> 无相关记录!</font></td></tr>
</s:if>
4.3.6、struts2截取字符串,超过长度省略号
<s:if test="subject.length()>=21"><s:property value='subject.substring(0,20)'/><b>. . .</b></s:if> 
<s:else>${info.subject }</s:else>
4.3.7、struts2时间格式化
<s:date name="publicTime" format="yyyy-MM-dd HH:mm:ss" />
4.3.7、list里为一个Object[]且只有一个字段的话(即后台Hibernate通过原始sql语句只返回一个字段的list列表时前台取值方法)
<s:iterator value="strArray" id="st">    
    <s:property value="%{#st}"/>    
</s:iterator>

5、<s:iterator>遍历数组

struts2的s:iterator 可以遍历 数据栈里面的任何数组,集合等等 以下几个简单的demo:
s:iterator 标签有3个属性:
    value:被迭代的集合
    id   :指定集合里面的元素的id
    status 迭代元素的索引
1:jsp页面定义元素写法 数组或list

<s:iterator value="{'1','2','3','4','5'}" id='number'>
    <s:property value='number'/>A
</s:iterator>
打印结果为: 1A2A3A4A5A
2:索引的用法
如果指定了status,每次的迭代数据都有IteratorStatus的实例,它有以下几个方法
int getCount()返回当前迭代了几个元素
int getIndex()返回当前元素索引
boolean isEven()当然的索引是否偶数
boolean isFirst()当前是否第一个元素
boolean isLast()
boolean isOdd()当前元素索引是否奇数
<s:iterator value="{'a','b','c'}" id='char' status='st'>

序号:
<s:property value="#st.index+1"/>
判断第几个值
<s:if test="#st.index==4">

   
<s:if test="#st.Even">
        现在的索引是奇数为:<s:property value='#st.index'/>
    </s:if>
    当前元素值:<s:property value='char'/>
</s:iterator>
3:遍历map
value可以直接定义为:
value="#{"1":"a","2":"b"}"
每个元素以都好隔开。元素之间的key和value 冒号隔开
value也可以是数据栈里面的java.util.Map对象
遍历写法如下:
<s:iterator value="map" id="id" status="st">
     key : <s:property value='key'/>
     value:<s:property vlaue='value'/>
</s:iterator>
当然key 和value 都可以使java 的 Object
3:遍历数据栈.简单的List类,
List<Attr>
class Attr{String attrName;String getAttrName(){return "123";}}
<s:iterator value="label" id="id">
    <s:property value="#id.attrName" />
</s:iterator>
当然value 还可以写成 value="%{label}" label可以有.操作
label的属性List 可以写成value="%{label.list}" 相当于:getLabel().getList();
4:遍历2个list;
List<AttrName> attrN {color,size,style}
List<AttrValue> attrV {red,20,gay}
这2个list的元素是一一对应的,一个attrN对应一个attrV
<s:iterator value="%{attrN }" id="id"   status="status">
index    is : <s:property value='status.index'/>
attrName is : <s:property value='id'/> or <s:property value='%{id}'/>
attrName is : <s:property value='%{attrV[#status.index]}'/>
</s:iterator> 

6、<s:property>标签
6.1、如果action中list值数量固定,前台读取list中某个对象值<s:property value="list.get(8).getName()">


五、日期格式化显示
<s:date name="startTime"   format="yyyy-MM-dd HH:mm:ss"/>

六、<s:checkboxlist name="dd"  list="{'a1','a2','a3','a4','a5','a6','a7','a8' }"  />

七、截取字符串
// 当长度超过6时截取前6为显示       
<s:if test="str.length()>6">       
     <s:property value="str.substring(0,6)+'...'" />       
</s:if>       
//否则全部显示       
<s:else>       
      <s:property value="str" />       
</s:else>
、、、、、、、、、、、、、、、
<s:if test="%{#str.length()>6}">
    <s:property value="str.substring(0,6)+'...'" />
</s:if>
//否则全部显示
<s:else>
    <s:property value="str" />
</s:else>

<s:if test='#abc2[3]!=""'>
    <s:property value="#abc2[3]" />
</s:if>
七、页面调试
<s:debug></s:debug>

八、action中list赋值给checkbox
<s:checkboxlist name="suiguoNames" list="shuiguoList" value="chushizhi"></s:checkboxlist>
shuiguoList.add("水果");
shuiguoList.add("苹果");
shuiguoList.add("香蕉");
shuiguoList.add("桃子");
shuiguoList.add("荔枝");
分享到:
评论

相关推荐

    使用Struts 2标签的注意事项

    Struts 2 标签的使用注意事项 Struts 2 是一个基于MVC架构的Java Web应用程序框架,它提供了一系列的标签来简化Web开发。然而,在使用Struts 2标签时,需要注意一些重要的事项。 首先,在使用Struts 2标签之前,...

    struts2.2.1开发文档

    11. **最佳实践**:提供了一系列开发建议,如代码组织、性能优化、安全注意事项等,以帮助开发者遵循良好的编程习惯。 12. **示例应用**:通过实际示例演示了上述知识点的应用,帮助读者更好地理解和掌握Struts2...

    Struts Struts1例子Struts注意事项

    在使用Struts1时,有几点注意事项: 1. **配置文件准确性**:struts-config.xml是Struts框架的核心配置文件,必须正确配置Action、ActionForm和ActionMapping,否则可能导致请求无法正确处理。 2. **异常处理**:...

    struts2使用json注意事项

    在使用Struts2框架开发Web应用时,JSON(JavaScript Object Notation)作为一种轻量级的数据...理解并掌握这些注意事项,可以帮助开发者更有效地在Struts2框架中利用JSON进行数据交换,提高应用程序的效率和安全性。

    struts2全部的jar包

    8. **使用注意事项**: 使用Struts2的全部JAR包时,要注意避免版本不兼容问题,确保所有库的版本一致。同时,正确配置web.xml文件,指定Struts2的过滤器。 9. **最佳实践**: - 为了代码整洁,推荐使用注解配置而...

    struts2开发.包

    9. **安全注意事项**: - 注意防止XSS、CSRF等Web安全攻击,Struts2提供了一些内置的防护措施,但需要正确配置和使用。 - 定期更新Struts2版本以获取最新的安全补丁。 10. **协作与沟通**: - 和客户保持良好...

    徒手配置Struts2

    #### 一、徒手配置Struts2环境时需注意的关键事项 在没有使用任何集成开发环境的情况下配置Struts2,可能会遇到各种问题,尤其是在配置过程中对于细节的把握至关重要。以下是配置过程中需要注意的一些关键点: 1. ...

    Struts2+Hibernate开发环境搭建

    **注意事项:** 1. 避免内存泄漏:在使用完Session后记得关闭。 2. 数据库连接池:使用连接池如C3P0或HikariCP提高性能。 3. 错误处理:对可能出现的异常进行捕获和处理。 4. 性能优化:合理使用缓存,避免过多的...

    Struts2_开发详解.ppt

    Struts2_开发详解.ppt 详细讲解strtuts2的原理及开发注意事项

    eclipse 配置struts2

    **标题:“Eclipse配置Struts2”** 在Java Web开发中,Struts2是一个非常流行的MVC(模型-...文件列表中的“eclipse配置struts.docx”可能包含了更详细的配置步骤或注意事项,如果需要更详尽的信息,建议查阅该文档。

    Struts2-045漏洞利用工具

    `使用说明.txt`文件应当包含了如何运行和使用`s2exp.py`脚本的详细步骤和注意事项。这可能包括了安装依赖、配置参数、理解输出结果等方面的内容。遵循这些说明,安全研究人员或渗透测试人员可以检查目标系统是否易受...

    struts2简单案例

    6. **注意事项** - 使用Struts2时要注意安全问题,如SQL注入、XSS攻击等,合理使用Struts2的安全拦截器。 - 理解MVC模式的重要性,避免在JSP中编写过多的业务逻辑。 - 保持良好的编程习惯,如代码注释、命名规范...

    struts2登录实例

    五、安全注意事项 在实际开发中,要注意以下几点: - 密码应加密存储,避免明文保存。 - 对用户输入进行验证,防止SQL注入和跨站脚本攻击。 - 使用HTTPS确保通信安全。 - 设计良好的错误处理机制,避免泄露敏感信息...

    Struts2权威指南完整版

    11. **最佳实践与性能优化**:提供开发高质量Struts2应用的建议,包括代码组织、性能调优和安全注意事项。 12. **实战案例**:通过实际项目示例,展示如何从零开始构建一个完整的Struts2应用,涵盖需求分析、设计、...

    swfuplaod+struts2实现多文件上传

    SWFUpload 是一款开源的Flash上传组件,...通过上述步骤和注意事项,你可以利用SWFUpload和Struts2构建一个功能强大且安全的多文件上传功能。在实际项目中,根据需求进行适当的定制和优化,以满足用户需求和系统安全。

    Spring与Struts2整合

    **五、注意事项** - 确保Struts2和Spring的版本兼容,避免因版本问题引发的冲突。 - 配置文件的正确性至关重要,任何一个小错误都可能导致应用无法正常运行。 - 在使用Struts2-Spring插件时,注意Action类的生命周期...

    struts2实现文件上传下载

    5. **安全注意事项** 在处理文件上传时,务必注意安全问题,防止文件覆盖、非法文件类型上传以及恶意代码注入。可以通过验证文件扩展名、限制文件大小和类型,以及将上传的文件保存到指定的安全目录来提高安全性。 ...

    struts2学习笔记黑马程序员

    ### Struts2学习笔记之文件上传与Ajax开发 #### Struts2文件上传 **文件上传简介** 文件上传是Web应用中常见的功能之一,Struts2框架内置了对文件上传的支持,使得开发者能够轻松地实现这一功能。为了确保文件...

Global site tag (gtag.js) - Google Analytics