由于小项目中性别使用了enum,但是在jsp页面中,使用select不容易得到,于是查资料之后得到以下结论;
- enum类
package com.zcg.model; public enum SEX { 男("男"), 女("女"); private String sex; private TYPE(String sex) { this.sex = sex; } public String getSex() { return sex; } public String toString(){ return this.sex; } }
- User类
package com.zcg.model; public class User { private int id; private String name; private SEX sex; public int getId() { return id; } public String getName() { return name; } public SEX getSex() { return sex; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } public void setSex(SEX sex) { this.sex = sex; } }
- action类
package com.zcg.action; import com.opensymphony.xwork2.*; public class UserAction extends ActionSupport{ private User user; @Override public String execute() throws Exception { return SUCCESS; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
- jsp页面
jsp页面就不全贴出来了,name是action中命名一样加上属性 list中使用Enum的静态方法values()可以得到数组,listKey中的值理论上是name(),但是根据试验在java程序中能得到值,在jsp页面中没得到,使用listValue,值用默认的tostring方法得到值,并且显示到页面,这地方还是有点不大懂;<s:select name="user.sex" list="@com.zcg.model.SEX@values()" listKey="name()" listValue="toString()"/>
- 出来之后页面下拉列表会换行,主要是因为<s:select/>标签会被<tr><td>环绕,改成如下;
<s:select name="user.sex" list="@com.zcg.model.SEX@values()" listKey="name()" listValue="toString()" theme="simple"/>