Struts如何实现动态的checkbox,希望高手们都来关注一下!200分

whoknow 2004-08-10 11:39:20
刚刚开始用struts开发系统,发现跟原来的很多做法都不一样了,目前遇到的其他问题都已经解决了,不过最让我头痛的就是这个checkbox的动态生成问题,我们的业务现在是这样的,从数据库中提出数据,然后把从数据库中提出的数据放到页面checkbox的value中.但现在问题是这样的,原来的checkbox的name都是动态的.现在改用struts以后,我就不知道这个东西怎么用了,这个东西怎么在ActionForm中定义get set方法,总不能我有多少行就写多少个get set 方法吧.这个问题已经让我郁闷n久了,关键是我不清楚他这个checkbox的标签是怎样工作的.或者这样的问题在struts中有其他的解决方法,还请高手没不吝赐教!如果我有叙述不当之处,望指出,我好作出更加详细的解释!
...全文
313 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
sy_programmer 2004-08-16
  • 打赏
  • 举报
回复
mark
kui 2004-08-14
  • 打赏
  • 举报
回复
可参考http://dev.csdn.net/user/kui:

《Struts复选框的实现》
《Struts单选框的实现》
《Struts下拉框的实现》
caiyi0903 2004-08-14
  • 打赏
  • 举报
回复
<html:select property="AAA">
<html:options collection="BBB" property="code" labelProperty="label" />
</html:select>
sdsdsdsder 2004-08-14
  • 打赏
  • 举报
回复
正在学习
newdayhope 2004-08-12
  • 打赏
  • 举报
回复
好贴。收藏。
sulo_xxr 2004-08-12
  • 打赏
  • 举报
回复
<html:select property="assessyear" style="height:100;width:150" >
<html:options collection="assessyear" property="value" labelProperty="label" />
</html:select>
steeven 2004-08-12
  • 打赏
  • 举报
回复
参考:http://husted.com/struts/tips/007.html
steeven 2004-08-12
  • 打赏
  • 举报
回复
根据上面的想法,做了一下,还可以. checkbox列表控件:
1. 定义Tile模板. tiles-defs.xml:
<definition controllerClass="mytest.MasterDataControler" name="list" path="/control/checkboxlist.jsp"/>
2. 定义MasterDataControler.java:
package mytest;
import org.apache.struts.action.*;
import javax.servlet.http.*;
import org.apache.struts.tiles.ComponentContext;
import javax.servlet.ServletContext;
public class MasterDataControler implements org.apache.struts.tiles.Controller{
public void perform(ComponentContext tileContext, HttpServletRequest request,
HttpServletResponse response,
ServletContext servletContext) {
request.setAttribute("master",new MasterDataFormBean()); //构造缓存主数据,或者根据用户参数动态构造.
}
}
3. MasterDataFormBean.java:
public class MasterDataFormBean {
public String[] getList(){
String[] list = new String[]{"a","b","c"};
return list;
}
}
4. checkboxlist.jsp:
<tiles:useAttribute name="paramName"/>
<logic:iterate id="item" name="master" property="list">
<html:multibox property='<%=(String)paramName%>'><bean:write name="item"/></html:multibox>
<bean:write name="item"/>
</logic:iterate>

5. 在网页中调用控件:
<tiles:insert definition="list" flush="false">
<tiles:put name="paramName" value="list"/> 这里每个jsp页面控件的名称可能会不同.
</tiles:insert>

steeven 2004-08-12
  • 打赏
  • 举报
回复
我觉得这种东西在很多页面都会存在,应该做成通用控件,而不是在每个页面都写类似的代码.

可以考虑用tiles作,配合ControlClass提供数据.带当前值作为参数进去.应该很方便.
flashroom 2004-08-12
  • 打赏
  • 举报
回复
Struts中处理动态checkbox应该用multibox框 like this:

<html:multibox property="ids" disabled="true">
<bean:write name="document" property="documentId"/>
</html:multibox>

然后你的bean属性应该是数组形式 like this

Integer ids[];{set ... get...}


wubai250 2004-08-12
  • 打赏
  • 举报
回复
ViewAction.java

package question;

import org.apache.struts.action.*;
import javax.servlet.http.*;
import java.util.*;
import java.sql.*;
import org.apache.struts.taglib.html.BaseHandlerTag;

public class ViewAction extends Action {
public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
ResultSet rs = null;
DB db = null;
HashMap row = null;
String sql = "";
String tmp = "";
int id ;

try {
id = Integer.parseInt(httpServletRequest.getParameter("id"));
}
catch(Exception e){
id = 0;
}
sql = "select title,nickname,addtime,replytype,questiontype,tele,email,attach,question,city from question where id =" + id;
db = new DB();
db.getConnect();
try {
rs = db.query(sql);

row = new HashMap(1);
if (rs.next()) {
row.put("title", rs.getString("title"));
row.put("nickname", rs.getString("nickname"));
row.put("tele", rs.getString("tele"));
row.put("email", rs.getString("email"));
row.put("questiontype", rs.getString("questiontype"));
row.put("replytype", rs.getString("replytype").split(","));
row.put("addtime", rs.getString("addtime"));
row.put("question", rs.getString("question"));
row.put("city", rs.getString("city"));

if (rs.getString("attach").equals("")) {
row.put("attach","");
}
else {
row.put("attach",
"<a href='./upload/" + rs.getString("attach") +
"' target='_blank'>View Attach</a>");
}
}

}
catch(Exception e) {
System.out.println("Fetch Info errors:" + e);
}
finally{
try{
rs.close();
db.close();
}
catch(Exception e) {
System.out.println("Close Connection Error:" + e);
}
}
httpServletRequest.setAttribute("row", row);
return actionMapping.findForward("view");

}
}
wubai250 2004-08-12
  • 打赏
  • 举报
回复
view.jsp

<%@ page contentType="text/html; charset=GBK" %>
<%@ 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" %>


<html:html>
<head>
<title>view Info</title>
</head>
<body>
<p align="center">查看疑问信息</p>
<table width="600" border="1" align="center" cellpadding="2" cellspacing="0">
<tr align="center">
<td colspan="2"><bean:write name="row" property="title"/></td>
</tr>
<tr>
<td>网友:<bean:write name="row" property="nickname"/></td>
<td>添加时间:<bean:write name="row" property="addtime"/></td>
</tr>
<tr>
<td>问题类型:
<html:radio name="row" property="questiontype" value="1"><bean:message key="add.label.questiontype.option1"/></html:radio>
<html:radio name="row" property="questiontype" value="2"><bean:message key="add.label.questiontype.option2"/></html:radio>
<html:radio name="row" property="questiontype" value="3"><bean:message key="add.label.questiontype.option3"/></html:radio>
</td>
<td>回复类别:
<html:multibox name="row" property="replytype" value="1"/><bean:message key="add.label.replytype.option1"/>
<html:multibox name="row" property="replytype" value="2"/><bean:message key="add.label.replytype.option2"/>
</td>
</tr>
<tr>
<td width="88" valign="top"><bean:message key="add.label.city"/></td>
<td width="506">
<html:select name="row" property="city">
<html:option value="葫芦岛">葫芦岛1</html:option>
<html:option value="沈阳">沈阳1</html:option>
<html:option value="抚顺">抚顺1</html:option>
</html:select>
</td>
</tr>
<logic:notEmpty name="row" property="attach" >
<tr>
<td colspan="2"><bean:write name="row" property="attach" filter="false"/></td>
</tr>
</logic:notEmpty>
<tr>
<td colspan="2"><bean:write name="row" property="question"/></td>
</tr>

</table>
</body>
</html:html>

whoknow 2004-08-12
  • 打赏
  • 举报
回复
能有个完整点的例子吗,拜托大家了.谢谢!
chancelin 2004-08-10
  • 打赏
  • 举报
回复
属性用数组或者集合试试看。
shuneng 2004-08-10
  • 打赏
  • 举报
回复
GZ
louiswg 2004-08-10
  • 打赏
  • 举报
回复
在页面显示时只要先得到值,在通过JS来判断:)
louiswg 2004-08-10
  • 打赏
  • 举报
回复
JSP:
<html:checkbox property="check" value="1"/>
<html:checkbox property="check" value="2"/>
<html:checkbox property="check" value="3"/>

Action Form(Dynamic Form):
<form-property name="check" type="java.lang.String[]"/>

Session bean:
String[] x = (String[])map.get("check");

是一个数组
whoknow 2004-08-10
  • 打赏
  • 举报
回复
laoer(laoer),老兄能给个例子,比如你自己该项的tag看看吗?我需要的是动态的.
laoer 2004-08-10
  • 打赏
  • 举报
回复
checkbox的name应该是一样的
<INPUT TYPE="checkbox" NAME="name" value="0">
<INPUT TYPE="checkbox" NAME="name" value="1">
<INPUT TYPE="checkbox" NAME="name" value="2">
在ActionForm中,用int[] name(当然也可能是String[]、long[]),和相应的get、set方法,这样就能取到所有选中的值,然后遍历处理。
对于Struts的checkbox标签,确实有局限,我已经重写了checkbox的标记库,以适应自己的需要。
Wolfzhang 2004-08-10
  • 打赏
  • 举报
回复
关注
加载更多回复(6)

67,511

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧