Struts2的<s:selectlist>与Action中实体类、出错集望解决·

本文详细介绍了Struts标签的使用方法,包括文本输入、密码输入、下拉选择、登录按钮、重置按钮以及如何从请求中获取数据并显示在页面上。还探讨了如何在JSP页面中使用Struts标签实现复选框集合的显示和存储,包括如何正确地处理选中的选项,并提供了解决方案以避免数据持久化时的问题。同时,文章还涉及了如何在页面中使用`<s:select>`标签将listValue传递给文本域的问题,并给出了正确的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<s:form action="login">
  <hr color="#00FFFF" size="4">
    <s:textfield label="管理员编号" name="user.adminId"></s:textfield>
  <s:password label="密码" name="user.adminpassword"></s:password>
  <%
  HashMap map = new LinkedHashMap();
  List list = new ArrayList();
  map.put("id","1");
      map.put("nw","管理员");
      list.add(map); 
      map.put("id","2");
      map.put("nw","教研室主任");
       list.add(map);
      map.put("id","3");
map.put("nw","院方管领导");
list.add(map);
map.put("id","4");
map.put("nw","教学秘书");
list.add(map);
request.setAttribute("testlist",list);


request.setAttribute("aa","2");
  %>
  <!--  <s:select list="#request.map"  label="abc" listKey="key" listValue="value" value="#request.aa"  headerKey="0" headerValue="--请选择--"></s:select>
  -->
   <select name="id">
       <s:iterator value="#request.testlist" status="stuts" id="test">
          <option value='<s:property value="#test.id" />'><s:property value="#testnw" /></option>
       </s:iterator>  
    </select>
  
  <s:submit value="登陆"></s:submit>

  <s:reset value="重置"></s:reset>




所以本人选择例外一种


 <div style="background:url(images/07.jpg); width: 1024px; height: 748px;">
 <div style="margin-top: 200px"><font size="20" color="#019858" face="华文行楷">中等专业学校信息化平台</font> </div>
  <div style="margin-top: 100px">
  <s:form action="login">
  <hr color="#00FFFF" size="4">
    <s:textfield label="管理员编号" name="user.adminId"></s:textfield>
  <s:password label="密码" name="user.adminpassword"></s:password>
    <s:select list="#{1:'管理员',2:'教研室主任',3:'院方管领导',4:'教学秘书'}" name="user.type" class="login_txt" label="abc" listKey="key" listValue="value"  headerKey="0" headerValue="--请选择--">
               </s:select>
  <s:submit value="登陆"></s:submit>
  <s:reset value="重置"></s:reset>
就没错啦。。但是很迷惑怎么取到值根据值来操作

private List<String> types ;//提供了set和get方法
一个方法
public String load() throws Exception{
types=new ArrayList<String>() ;
types.add("学历") ;
types.add("工作") ;
return ActionSupport.SUCCESS ;
}
struts.xml
<action name="basicmessageload" class="basicMessageAction" method="load">
            <result>/basicmessage.jsp</result>
</action>
在basicmessage.jsp中:
<s:select list='<s:property value="types"/>' listKey="key"
listValue="value"
name="bm.type"
headerKey="-1" headerValue="请选择"></s:select>

调用过程:

点击一个按钮(load.action),就会进行action中的load方法,成功后跳到jsp中

!-- 使用Struts标签定义复选框集合 -->
 <s:set name="hobbies" 
  value="# {'h001':'篮球','h002':'足球','h003':'乒乓球','h004':'羽毛球','h005':'网球'}">
 </s:set>

<!-- 显示复选框集合,list指定加载上面<s:set/>定义的集合,name指定读取和设置person对象的hobby属性 -->
<s:checkboxlist name="person.hobby" list="#hobbies"  theme="simple"  ></s:checkboxlist>

实体类中定义了一个private String hobby属性,在后台能获得前台所点击选中的选项(注意:选中的选项传到后台
是这样的,比如前台选中的是篮球和足球,那么后台获得的是:h001,h002),这时发现提交貌似是好用的。其实在重新显示的时候就出现问题了,显示的内容没有上次所选中的选项,因为它把我们刚才存储的hobby属性当成value放到<s:selectlist>标签的每个选项里了。恕某不才刚知道<s:selectlist>存储是使用数组的,而我们那个hobby属性是字符串的,所以Struts把选中的所有key排成字符串放到hobby里了,这里就又有问题了,如果是数组的话那么我们把实体类持久化的时候就不行了,数据库里又不能存储数组。于是我就又在实体类中定义了一个private String[] hobbyArr;属性,把页面也稍做修改让<s:selectlist>的name="person.hobbyArr",然后修改映射文件不去处理实体类的hobbyArr属性,对于hobbyArr的set方法把数组转换成相应的字符串赋值给hobby(如:h001,h002)get方法把hobby的值split(",")赋值给hobbyArr,这样就相当于hobbyArr总是控制数组,hobby总是控制字符串了,这样问题就解决了。


还可以这样

页面中s:select中取listValue的值
JSP页面里的这句代码如下:
<s:select id="dw" name="dw" headerKey="" headerValue="全部" list="datalist" listKey="dw" listValue="dwmc" onchange="document.getElementById('deptname').value=this.value;" />
作用是想把listValue的值同时赋值给名为“deptname”的文本域,但是通过this.value的方法获取的是listKey的值。而我用this.text方法去获取时,却提示undefined。
所以,想问,在this后应该跟什么方法才能获取listValue的值呢?

------解决方案--------------------
$("#XXXX").find("option:selected").text();
这样可以获取选中的listValue
至于LZ上面的写法,LZ自己调试调试 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值