三. <s:radio> 单选框的设置与回显
三.一 前端设置
三.一.一 Map 形式前端设置
三.一.一.一 设置展示
<s:radio list="#{'1':'男','0':'女'}" name="sex" />
显示的样式便为:
三.一.一.一 设置默认选中
如果想设置选中的话, 用value值来确定。
<s:radio list="#{'1':'男','0':'女'}" name="sex" value="0"/>
上面是Map形式,也可以用list的形式
三.一.二 List 形式前端 设置
三.一.二.一 设置显示
<s:radio name="sex" list="{'男','女'}"/>
翻译成html为:
其中value与显示的label值是一样的。
三.一.二.二 设置默认选中
默认选择一个性别的话:
<s:radio name="sex" list="{'男','女'}" value="'女'"/>
其中注意,字符串用’'进行括起来。
一般来说,性别sex这个数据是由后端来设置和显示的,sex这个字段会被放在一个常量的实体中,这个常量实体一般为:
三.二 后端设置
三.二.一 定义常量 pojo
常量表实体: SystemConn
package com.yjl.pojo; /** * @author 两个蝴蝶飞 * @version 创建时间:Aug 24, 2018 10:56:42 PM * 类说明 常量表实体 */ public class SystemConn { /** * @param id 编号主键 * @param key key值 * @param value 具体的值 * @param description 相关的描述 */ private Integer id; private String key; private String value; private String description; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public SystemConn() { super(); } public SystemConn(Integer id, String key, String value, String description) { super(); this.id = id; this.key = key; this.value = value; this.description = description; } @Override public String toString() { return "SystemConn [id=" + id + ", key=" + key + ", value=" + value + ", description=" + description + "]"; } }
三.二.二 创建Action 获取数据 RadioAction
public class RadioAction extends ActionSupport{ private static final long serialVersionUID = 1L; public String showData(){ List<SystemConn> sexList=new ArrayList<SystemConn>(); //模拟数据 SystemConn s1=new SystemConn(1,"sex","男","男性"); SystemConn s2=new SystemConn(2,"sex","女","女性"); SystemConn s3=new SystemConn(3,"sex","保密","保密"); //将数据添加到集合中 sexList.add(s1); sexList.add(s2); sexList.add(s3); //将性别的集合放置到Request域中 ActionContext.getContext().put("sexList",sexList); return "radio"; } }
三.二.三 struts.xml 文件 配置
<!-- 配置radio 单选按钮显示 --> <action name="Radio_*" class="com.yjl.web.action.RadioAction" method="{1}"> <result name="radio">/WEB-INF/content/radio.jsp</result> </action>
三.二.四 前端展示 /content/radio.jsp
<s:radio list="#request.sexList" listKey="id" listValue="value" name="sex" />
输入网址: http://localhost:8080/Struts_Data/Radio_showData, 进行相应的展示数据
用list,listKey,listValue来进行相应的显示,翻译后的html为:
其中可以发现,listKey代表的是实际的值,listValue为页面显示的值,list自然为要显示的后端数据。
三.二.四 前端显示设置默认选中
其中如果设置默认选中的话,如默认选中第二个女: 只需要添加一个value集合即可。
<s:radio list="#request.sexList" listKey="id" listValue="value" name="sex" value="#request.sexList[1].id"/>
这样就默认选中第二个了.
也可以使其选中男性,直接用准确的值表示,如:
<s:radio list="#request.sexList" listKey="id" listValue="value" name="sex" value="2"/>
现在只是在页面上全部显示出来能够选择的属性
三.三 对象配置展示
实际开发中是将User中的sex显示出来,然后选中相应的radio。
需要将User与SystemConn进行相应的关联。(User类中已经存在一个sex普通值了,暂时多添加一个gender来表示.sex仍然不去掉).
三.三.一 User.java 添加对象属性
在User.java中
/** * @param gender 要演示的性别 */ private SystemConn gender;
实现它的setter和getter方法。
三.三.二 后端设置
在后端程序中:
public String showData2(){ //存储常量性别的集合 List<SystemConn> sexList=new ArrayList<SystemConn>(); //模拟数据 SystemConn s1=new SystemConn(1,"sex","男","男性"); SystemConn s2=new SystemConn(2,"sex","女","女性"); SystemConn s3=new SystemConn(3,"sex","保密","保密"); //将数据添加到集合中 sexList.add(s1); sexList.add(s2); sexList.add(s3); //将性别的集合放置到Request域中 ActionContext.getContext().put("sexList",sexList); //设置用户 User user7=new User(7,"两个蝴蝶飞","123","男",24,"在下"); //设置性别之间的关联gender user7.setGender(s1); //将user7用户放置到ValueStack的栈顶 ActionContext.getContext().getValueStack().push(user7); return "radio"; }
三.三.三 配置struts.xml 文件
不需要改变,不动。
三.三.四 /content/radio 页面编写
在前端jsp页面中:
${name}的性别是: <s:radio list="#request.sexList" listKey="id" listValue="value" name="gender" value="%{gender.id}"/>
输入网址: http://localhost:8080/Struts_Data/Radio_showData2, 进行相应的展示数据
有的时候,为了简单开发,会将性别这个字段设置成普通的字符串String sex,而不是SystemConn gender,
也就是并不让User表与SystemConn表外键关联性别。
这个时候,前端的编写成 为:
${name}的性别是: <s:radio list="#request.sexList" listKey="value" listValue="value" name="sex" value="%{sex}"/>
四. <s:checkboxlist>复选框的设计与回显
用的是s:checkboxlist, 而不是 s:checkbox
与<s:radio /> 基本相同,这里就简化书写了
四.一 前端形式表达
四.一.一 前端 Map 形式表达
map形式表达:
<s:checkboxlist name="hobbys" list="#{'1':'读书','2':'写小说','3':'编程'}" value="{'2','3'}"></s:checkboxlist>
四.一.二 前端 List 形式表达
list形式表达:
<s:checkboxlist name="hobbys" list="{'读书','写小说','编程'}" value="{'写小说','编程'}"></s:checkboxlist>
其中 value表示选中哪一个。 用value="{}" 集合形式进行表示。
四.二 对象配置展示
从后端向前端传递数据,然后显示在前端。 将上面的SystemConn gender,改改, 只是radio是一个对象,checkboxlist成为一个集合了。(常用于权限的选择和修改)
四.二.一 User.java 类
在User.java中
/** * @param hobbys 要演示的爱好 */ private List<SystemConn> hobbys=new ArrayList<SystemConn>();
实现setter和getter方法
四.二.二 CheckBoxListAction
在CheckBoxListAction中
public class CheckBoxListAction extends ActionSupport{ private static final long serialVersionUID = 1L; public String getData(){ //存储常量爱好的集合 List<SystemConn> hobbysList=new ArrayList<SystemConn>(); //模拟数据 SystemConn s1=new SystemConn(1,"hobbys","读书","读书"); SystemConn s2=new SystemConn(2,"hobbys","写小说","写小说"); SystemConn s3=new SystemConn(3,"hobbys","编程","编程"); SystemConn s4=new SystemConn(4,"hobbys","唱歌","唱歌"); //将数据添加到集合中 hobbysList.add(s1); hobbysList.add(s2); hobbysList.add(s3); hobbysList.add(s4); //将爱好的集合放置到Request域中 ActionContext.getContext().put("hobbysList",hobbysList); //设置用户 User user7=new User(7,"两个蝴蝶飞","123","男",24,"在下"); //设置爱好之间的关联hobbys user7.getHobbys().add(s2); user7.getHobbys().add(s3); //将user7用户放置到ValueStack的栈顶 ActionContext.getContext().getValueStack().push(user7); return "checkbox"; } }
四.二.三 配置struts.xml 文件
<!-- 配置checkboxList 多选框显示 --> <action name="CheckBoxList_*" class="com.yjl.web.action.CheckBoxListAction" method="{1}"> <result name="checkbox">/WEB-INF/content/checkbox.jsp</result> </action>
四.二.四 编写 /content/checkbox.jsp 页面
在前端界面上显示:
${name}的爱好是: <s:checkboxlist name="hobbys" list="#request.hobbysList" listKey="id" listValue="value" value="hobbys.{id}"></s:checkboxlist>
注意此时value的写法: value=“hobbys.{id}” 即可。
输入网址: http://localhost:8080/Struts_Data/CheckBoxList_getData
展示数据为:
html解析如下所示。
四.三 设置成字符串集合
有的时候,爱好并不会做成对象关联,很可能只是一个普通的字符串,而且这个字符串是用户自己定义的,这个时候爱好只是一个普通的字符串。
四.三.一 User.java 中扩展
User.java中
/** * @param loves 要演示的字符串爱好 */ private List<String> loves=new ArrayList<String>();
四.三.二 CheckBoxListAction 添加方法
Action中
public String getData2(){ ///存储常量爱好的集合 List<String> lovesList=new ArrayList<String>(); lovesList.add("读书"); lovesList.add("写小说"); lovesList.add("编程"); lovesList.add("唱歌"); //将爱好的集合放置到Request域中 ActionContext.getContext().put("lovesList",lovesList); //设置用户 User user7=new User(7,"两个蝴蝶飞","123","男",24,"在下"); //设置爱好之间的关联hobbys user7.getLoves().add("写小说"); user7.getLoves().add("编程"); //将user7用户放置到ValueStack的栈顶 ActionContext.getContext().getValueStack().push(user7); return "checkbox"; }
四.三.三 配置struts.xml 文件
不需要改变
四.三.四 编写 /content/checkbox.jsp 页面
前端界面
<s:checkboxlist name="loves" list="#request.lovesList"></s:checkboxlist>
value不需要写,struts2给封装好了,不写value时,只要保证name=“loves” 与User.java中Loves属性名一致,就可以正常相应的回显。
输入网址: http://localhost:8080/Struts_Data/CheckBoxList_getData2 ,
就可以显示: