--------------------------------------------------------------------------------------------------------------------
问题:action中的布尔值无法取值
原因:boolean型变量在MyEclipse自动生成get和set方法会发生改变,改变之后无法对应Struts2的赋值规律
解决办法:按照Struts的赋值规律修改boolean变量的get和set方法,具体修改请看下文;
-----------------------------------------------------------------------------------------------------------------------
当我在使用Struts2框架时,遇到jsp无法从action中获取布尔值的问题,情况如下:
一:定义person对象,自动生成get和set方法,如下:
1 import java.io.Serializable; 2 3 public class PersonBean implements Serializable { 4 5 private String idCard; 6 private String personName; 7 private String personSex; 8 private int personAge; 9 private boolean isMarry; 10 11 public String getIdCard() { 12 return idCard; 13 } 14 15 public void setIdCard(String idCard) { 16 this.idCard = idCard; 17 } 18 19 public String getPersonName() { 20 return personName; 21 } 22 23 public void setPersonName(String personName) { 24 this.personName = personName; 25 } 26 27 public String getPersonSex() { 28 return personSex; 29 } 30 31 public void setPersonSex(String personSex) { 32 this.personSex = personSex; 33 } 34 35 public int getPersonAge() { 36 return personAge; 37 } 38 39 public void setPersonAge(int personAge) { 40 this.personAge = personAge; 41 } 42 43 public boolean isMarry() { 44 return isMarry; 45 } 46 47 public void setMarry(boolean isMarry) { 48 this.isMarry = isMarry; 49 } 50 51 52 }
二、对应的action,如下:
1 import java.util.List; 2 import top.malloc.pojo.PersonPOJO; 3 import com.opensymphony.xwork2.ActionSupport; 4 5 public class CityAction extends ActionSupport{ 6 private List persons; 7 8 public List getPersons() { 9 return persons; 10 } 11 12 public void setPersons(List persons) { 13 this.persons = persons; 14 } 15 16 public String person() throws Exception{ 17 persons=new PersonPOJO().getPerson(); 18 return "success"; 19 } 20 21 }
三、相应的jsp,body省略
<table border="3">
<tr>
<td> 姓名</td><td>性别</td><td>年龄</td><td>身份认证号</td><td>婚姻状况</td>
</tr>
<s:iterator value="persons" var="per">
<tr>
<td><s:property value="#per.personName"/></td>
<td><s:property value="#per.personSex"/></td>
<td><s:property value="#per.personAge"/></td>
<td><s:property value="#per.idCard"/></td>
<td><s:if test="#per.isMarry==true">已婚</s:if>
<s:elseif test="#per.isMarry==false">未婚</s:elseif></td>
</tr>
</s:iterator>
</table>
出现的问题:action中的布尔值无法取值,仔细查看代码,发现问题出在布尔值的get和set方法上,自动生成的get和set方法无法遵循Struts的赋值规则
错误代码如下:
public boolean isMarry() { return isMarry; } public void setMarry(boolean isMarry) { this.isMarry = isMarry; }
修改之后:
public boolean getIsMarry() { return isMarry; } public void setIsMarry(boolean isMarry) { this.isMarry = isMarry; }
运行结果如上图