★风中♀影★ 的 LabelValueBean应用
用LabelValueBean类管理一组选项
multibox和另外几种标签往往需要使用一个或多个标签/值对作为其选项的来源。说到封装一组label/value值,org.apache.struts.util.LabelValueBean类是一个非常方便的工具。LabelValueBean类是一个JavaBean,它有两个String类型的属性:label和value。我们可以用它的两个构造器之一来创建LabelValueBean对象。
public LabelValueBean()
public LabelValueBean(java.lang.String label,)
java.lang.String value
我们通常需要先创建多个LabelValueBean实例并把它们放入一个ArrayList或其他类型的集合,再把这个集合设置为作用域对象以便从JSP页面对之进行访问。或者,我们也可以把包含着LabelValueBean对象的集合先放入另一个对象,再把后者设置为作用域对象。
下面是把包含着LabelValueBean对象的集合设置为作用域对象时的基本原则:
(1) 如果在一个表单中只用到LabelValueBean对象,建议添加一个能返回集合的动作表单的属性。
(2) 如果在应用程序里的许多地方需要用到LabelValueBean对象,就应该把它们构成的集合设置为ServletContext对象的一个属性。
(3) 如果LabelValueBean对象的变化比较频繁(比如说,它们的值来自某个数据库并总是变来变去),就应该在某个动作类里去创建一个包含着这些LabelValueBean对象的集合,并把这个集合设置为一个请求作用域对象。
在action中把lwlxmlist(这是个ArrayList,里面放的是LabelValueBean)放到request中(没有用到spring框架,pub_code是一个代码表,树状结构的,根节点是"LWLXM"):
......
request.setAttribute("lwlxmlist", new Code().getMenu("LWLXM", "pub_code"));
......
在Code类中,组织一个ArrayList,里面放的是Labelvaluebean(大概的代码如下,没有用Hibernate,用的是我们实验室的一个数据库连接池,主要用来连接国产数据库的,仅供参考):
public ArrayList getMenu(String type_code, String table_name){
try{
ArrayList ret_list=new ArrayList();
SQLBean conn=new SQLBean();
ResultSet rs=conn.executeQuery("select * from "+table_name+" where parent_id=(select id from "+
table_name+" where code='"+type_code+"') order by code");
while(rs.next()){
ret_list.add(new LabelValueBean(rs.getString("description"),(rs.getString("code")==null)?"":rs.getString("code").trim()));
}
conn.close();
return ret_list;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
最后,在页面中这样显示下拉菜单:
......
<tr>
<td align="left">
论文类型:
</td>
<td align="left">
<logic:notEmpty name="lwlxmlist" scope="request">
<html:select property="lwlxm">
<html:optionsCollection name="lwlxmlist" />
</html:select>
</logic:notEmpty>
<font size=2 color=red><html:errors property="lwlxm" />
</font>
</td>
</tr>
......
不要忘了在jsp页面中引入html和logic标签:
<%@taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
ok了,这样就有下拉菜单了。
用LabelValueBean类管理一组选项
multibox和另外几种标签往往需要使用一个或多个标签/值对作为其选项的来源。说到封装一组label/value值,org.apache.struts.util.LabelValueBean类是一个非常方便的工具。LabelValueBean类是一个JavaBean,它有两个String类型的属性:label和value。我们可以用它的两个构造器之一来创建LabelValueBean对象。
public LabelValueBean()
public LabelValueBean(java.lang.String label,)
java.lang.String value
我们通常需要先创建多个LabelValueBean实例并把它们放入一个ArrayList或其他类型的集合,再把这个集合设置为作用域对象以便从JSP页面对之进行访问。或者,我们也可以把包含着LabelValueBean对象的集合先放入另一个对象,再把后者设置为作用域对象。
下面是把包含着LabelValueBean对象的集合设置为作用域对象时的基本原则:
(1) 如果在一个表单中只用到LabelValueBean对象,建议添加一个能返回集合的动作表单的属性。
(2) 如果在应用程序里的许多地方需要用到LabelValueBean对象,就应该把它们构成的集合设置为ServletContext对象的一个属性。
(3) 如果LabelValueBean对象的变化比较频繁(比如说,它们的值来自某个数据库并总是变来变去),就应该在某个动作类里去创建一个包含着这些LabelValueBean对象的集合,并把这个集合设置为一个请求作用域对象。
在action中把lwlxmlist(这是个ArrayList,里面放的是LabelValueBean)放到request中(没有用到spring框架,pub_code是一个代码表,树状结构的,根节点是"LWLXM"):
......
request.setAttribute("lwlxmlist", new Code().getMenu("LWLXM", "pub_code"));
......
在Code类中,组织一个ArrayList,里面放的是Labelvaluebean(大概的代码如下,没有用Hibernate,用的是我们实验室的一个数据库连接池,主要用来连接国产数据库的,仅供参考):
public ArrayList getMenu(String type_code, String table_name){
try{
ArrayList ret_list=new ArrayList();
SQLBean conn=new SQLBean();
ResultSet rs=conn.executeQuery("select * from "+table_name+" where parent_id=(select id from "+
table_name+" where code='"+type_code+"') order by code");
while(rs.next()){
ret_list.add(new LabelValueBean(rs.getString("description"),(rs.getString("code")==null)?"":rs.getString("code").trim()));
}
conn.close();
return ret_list;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
最后,在页面中这样显示下拉菜单:
......
<tr>
<td align="left">
论文类型:
</td>
<td align="left">
<logic:notEmpty name="lwlxmlist" scope="request">
<html:select property="lwlxm">
<html:optionsCollection name="lwlxmlist" />
</html:select>
</logic:notEmpty>
<font size=2 color=red><html:errors property="lwlxm" />
</font>
</td>
</tr>
......
不要忘了在jsp页面中引入html和logic标签:
<%@taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
ok了,这样就有下拉菜单了。