Apache Commons BeanUtils,其官方网站上介绍为“ Easy-to-use wrappers around the Java reflection and introspection APIs.”(易于使用的Java反射和自省API包装器),也就是一个可以为你访问Java Bean的属性带来方便的工具了。Struts中的JSP自定义标签便是配合使用BeanUtils来访问Java Bean的属性的。
参考:
Apache Commons BeanUtils http://commons.apache.org/beanutils/
在JSP中使用Struts“bean”标签来输出bean属性的范例代码:
<%
@ page language
=
"
java
"
%>
< jsp:directive .page import ="java.util.*" />
<% @ taglib uri = " http://struts.apache.org/tags-bean " prefix = " bean " %>
<% !
public static class Bean {
private String id;
private int [] array ;
private List list = new ArrayList();
private Map map = new HashMap();
private Bean nested;
public int [] getArray() {
return array ;
}
public void setArray( int [] array ) {
this.array = array ;
}
public String getId() {
return id;
}
public void setId( String id) {
this.id = id;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
public Bean getNested() {
return nested;
}
public void setNested(Bean nested) {
this.nested = nested;
}
public String toString() {
return " this is the Bean with id: " + this.id;
}
}
%>
<%
Bean bean = new Bean();
bean.setId( " b001 " );
bean.setArray( new int []{ 0 , 1 , 2 });
bean.getList().add( " listItem0 " );
bean.getList().add( " listItem1 " );
bean.getList().add( " listItem2 " );
bean.getMap().put( " key1 " , " value1 " );
bean.getMap().put( " key2 " , " value2 " );
bean.getMap().put( " key3 " , " value3 " );
bean.setNested( new Bean());
bean.getNested().setId( " b002 " );
pageContext.setAttribute( " bean " , bean);
%>
< html >
< body >
< table border ="1" >
< tr >< th > type </ th >< th > name </ th >< th > property </ th >< th > value </ th ></ tr >
< tr >< td rowspan ="1" > bean </ td >
< td > bean </ td >< td ></ td >< td >< bean:write name ="bean" /></ td ></ tr >
< tr >< td rowspan ="5" > property </ td >
< td > bean </ td >< td > id </ td >< td >< bean:write name ="bean" property ="id" /></ td ></ tr >
< tr >< td > bean </ td >< td > array </ td >< td >< bean:write name ="bean" property ="array" /></ td ></ tr >
< tr >< td > bean </ td >< td > list </ td >< td >< bean:write name ="bean" property ="list" /></ td ></ tr >
< tr >< td > bean </ td >< td > map </ td >< td >< bean:write name ="bean" property ="map" /></ td ></ tr >
< tr >< td > bean </ td >< td > nested </ td >< td >< bean:write name ="bean" property ="nested" /></ td ></ tr >
< tr >< td rowspan ="5" > nested(simple) property </ td >
< td > bean </ td >< td > nested.id </ td >< td >< bean:write name ="bean" property ="nested.id" /></ td ></ tr >
< tr >< td > bean </ td >< td > nested.array </ td >< td >< bean:write name ="bean" property ="nested.array" /></ td ></ tr >
< tr >< td > bean </ td >< td > nested.list </ td >< td >< bean:write name ="bean" property ="nested.list" /></ td ></ tr >
< tr >< td > bean </ td >< td > nested.map </ td >< td >< bean:write name ="bean" property ="nested.map" /></ td ></ tr >
< tr >< td > bean </ td >< td > nested.nested </ td >< td >< bean:write name ="bean" property ="nested.nested" /></ td ></ tr >
< tr >< td rowspan ="3" > indexed property(array) </ td >
< td > bean </ td >< td > array[0] </ td >< td >< bean:write name ="bean" property ="array[0]" /></ td ></ tr >
< tr >< td > bean </ td >< td > array[1] </ td >< td >< bean:write name ="bean" property ="array[1]" /></ td ></ tr >
< tr >< td > bean </ td >< td > array[2] </ td >< td >< bean:write name ="bean" property ="array[2]" /></ td ></ tr >
< tr >< td rowspan ="3" > indexed property(list) </ td >
< td > bean </ td >< td > list[0] </ td >< td >< bean:write name ="bean" property ="list[0]" /></ td ></ tr >
< tr >< td > bean </ td >< td > list[1] </ td >< td >< bean:write name ="bean" property ="list[1]" /></ td ></ tr >
< tr >< td > bean </ td >< td > list[2] </ td >< td >< bean:write name ="bean" property ="list[2]" /></ td ></ tr >
< tr >< td rowspan ="3" > mapped property(mapped style) </ td >
< td > bean </ td >< td > map(key1) </ td >< td >< bean:write name ="bean" property ="map(key1)" /></ td ></ tr >
< tr >< td > bean </ td >< td > map(key2) </ td >< td >< bean:write name ="bean" property ="map(key2)" /></ td ></ tr >
< tr >< td > bean </ td >< td > map(key3) </ td >< td >< bean:write name ="bean" property ="map(key3)" /></ td ></ tr >
< tr >< td rowspan ="3" > mapped property(nested style) </ td >
< td > bean </ td >< td > map.key1 </ td >< td >< bean:write name ="bean" property ="map.key1" /></ td ></ tr >
< tr >< td > bean </ td >< td > map.key2 </ td >< td >< bean:write name ="bean" property ="map.key2" /></ td ></ tr >
< tr >< td > bean </ td >< td > map.key3 </ td >< td >< bean:write name ="bean" property ="map.key3" /></ td ></ tr >
</ table >
</ body >
</ html >
< jsp:directive .page import ="java.util.*" />
<% @ taglib uri = " http://struts.apache.org/tags-bean " prefix = " bean " %>
<% !
public static class Bean {
private String id;
private int [] array ;
private List list = new ArrayList();
private Map map = new HashMap();
private Bean nested;
public int [] getArray() {
return array ;
}
public void setArray( int [] array ) {
this.array = array ;
}
public String getId() {
return id;
}
public void setId( String id) {
this.id = id;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
public Bean getNested() {
return nested;
}
public void setNested(Bean nested) {
this.nested = nested;
}
public String toString() {
return " this is the Bean with id: " + this.id;
}
}
%>
<%
Bean bean = new Bean();
bean.setId( " b001 " );
bean.setArray( new int []{ 0 , 1 , 2 });
bean.getList().add( " listItem0 " );
bean.getList().add( " listItem1 " );
bean.getList().add( " listItem2 " );
bean.getMap().put( " key1 " , " value1 " );
bean.getMap().put( " key2 " , " value2 " );
bean.getMap().put( " key3 " , " value3 " );
bean.setNested( new Bean());
bean.getNested().setId( " b002 " );
pageContext.setAttribute( " bean " , bean);
%>
< html >
< body >
< table border ="1" >
< tr >< th > type </ th >< th > name </ th >< th > property </ th >< th > value </ th ></ tr >
< tr >< td rowspan ="1" > bean </ td >
< td > bean </ td >< td ></ td >< td >< bean:write name ="bean" /></ td ></ tr >
< tr >< td rowspan ="5" > property </ td >
< td > bean </ td >< td > id </ td >< td >< bean:write name ="bean" property ="id" /></ td ></ tr >
< tr >< td > bean </ td >< td > array </ td >< td >< bean:write name ="bean" property ="array" /></ td ></ tr >
< tr >< td > bean </ td >< td > list </ td >< td >< bean:write name ="bean" property ="list" /></ td ></ tr >
< tr >< td > bean </ td >< td > map </ td >< td >< bean:write name ="bean" property ="map" /></ td ></ tr >
< tr >< td > bean </ td >< td > nested </ td >< td >< bean:write name ="bean" property ="nested" /></ td ></ tr >
< tr >< td rowspan ="5" > nested(simple) property </ td >
< td > bean </ td >< td > nested.id </ td >< td >< bean:write name ="bean" property ="nested.id" /></ td ></ tr >
< tr >< td > bean </ td >< td > nested.array </ td >< td >< bean:write name ="bean" property ="nested.array" /></ td ></ tr >
< tr >< td > bean </ td >< td > nested.list </ td >< td >< bean:write name ="bean" property ="nested.list" /></ td ></ tr >
< tr >< td > bean </ td >< td > nested.map </ td >< td >< bean:write name ="bean" property ="nested.map" /></ td ></ tr >
< tr >< td > bean </ td >< td > nested.nested </ td >< td >< bean:write name ="bean" property ="nested.nested" /></ td ></ tr >
< tr >< td rowspan ="3" > indexed property(array) </ td >
< td > bean </ td >< td > array[0] </ td >< td >< bean:write name ="bean" property ="array[0]" /></ td ></ tr >
< tr >< td > bean </ td >< td > array[1] </ td >< td >< bean:write name ="bean" property ="array[1]" /></ td ></ tr >
< tr >< td > bean </ td >< td > array[2] </ td >< td >< bean:write name ="bean" property ="array[2]" /></ td ></ tr >
< tr >< td rowspan ="3" > indexed property(list) </ td >
< td > bean </ td >< td > list[0] </ td >< td >< bean:write name ="bean" property ="list[0]" /></ td ></ tr >
< tr >< td > bean </ td >< td > list[1] </ td >< td >< bean:write name ="bean" property ="list[1]" /></ td ></ tr >
< tr >< td > bean </ td >< td > list[2] </ td >< td >< bean:write name ="bean" property ="list[2]" /></ td ></ tr >
< tr >< td rowspan ="3" > mapped property(mapped style) </ td >
< td > bean </ td >< td > map(key1) </ td >< td >< bean:write name ="bean" property ="map(key1)" /></ td ></ tr >
< tr >< td > bean </ td >< td > map(key2) </ td >< td >< bean:write name ="bean" property ="map(key2)" /></ td ></ tr >
< tr >< td > bean </ td >< td > map(key3) </ td >< td >< bean:write name ="bean" property ="map(key3)" /></ td ></ tr >
< tr >< td rowspan ="3" > mapped property(nested style) </ td >
< td > bean </ td >< td > map.key1 </ td >< td >< bean:write name ="bean" property ="map.key1" /></ td ></ tr >
< tr >< td > bean </ td >< td > map.key2 </ td >< td >< bean:write name ="bean" property ="map.key2" /></ td ></ tr >
< tr >< td > bean </ td >< td > map.key3 </ td >< td >< bean:write name ="bean" property ="map.key3" /></ td ></ tr >
</ table >
</ body >
</ html >
运行结果如下:
type | name | property | value |
---|---|---|---|
bean | bean | this is the Bean with id: b001 | |
property | bean | id | b001 |
bean | array | [I@1421875 | |
bean | list | [listItem0, listItem1, listItem2] | |
bean | map | {key1=value1, key3=value3, key2=value2} | |
bean | nested | this is the Bean with id: b002 | |
nested(simple) property | bean | nested.id | b002 |
bean | nested.array | ||
bean | nested.list | [] | |
bean | nested.map | {} | |
bean | nested.nested | ||
indexed property(array) | bean | array[0] | 0 |
bean | array[1] | 1 | |
bean | array[2] | 2 | |
indexed property(list) | bean | list[0] | listItem0 |
bean | list[1] | listItem1 | |
bean | list[2] | listItem2 | |
mapped property(mapped style) | bean | map(key1) | value1 |
bean | map(key2) | value2 | |
bean | map(key3) | value3 | |
mapped property(nested style) | bean | map.key1 | value1 |
bean | map.key2 | value2 | |
bean | map.key3 | value3 |