站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题关于struts的html标签的问题

关于struts的html标签的问题

摘要: 关于struts的html标签的问题


现在想实现一个这样的应用:
在一个jsp页面里显示出了所有的类别,每个类别后面都有一个“添加子类”的按钮,点击这个按钮之后,跳转到另一个jsp页面,在一个下拉列表里显示出数据库里的所有类别,但是默认显示的是刚才点击的那个类别,请问这个应该怎么实现呢?


有个简单的办法:
你在使用strtus标签时,只使用html:html等,可以不用html:option 什么的


第一个页面,从数据库中读出所有类别,在页面中进行循环读出,当然后面要跟按钮的
片断代码如下:
<%
for(int i=0;i{
%>
<tr>
<td><%=ds.getItemString(i+1,"typeName")%></td>
<td><input type="button" name="button<%=i%>" onclick="window.location.href='other.jsp?id=<%=ds.getItemString(i+1,"typeId")%>'"></td>
</tr>



然后在第二个页面讲循环读出的类型写入select控件,并通过前一个页面接受的id值来设定select的默认值



学习
帮顶!


请问select的默认值怎么设定阿??


Step 1:在Action中先作如下处理:

1. 生成一个Vector的对象,用来保存每一个下拉选项所对应的实例.
Vector options = new Vector();

2. 生成封装选项名-值的对象:org.apache.struts.util.LabelValueBean 
LabelValueBean item = new LabelValueBean(String p0, String p1);
参数说明:
p0:选项名称,即选项所显示的字符.
p1:选项值.value.

3. 通过循环将多个选项对象添加到Vector中.

4. 将Vector对象放到session中或request中.
request.setAttribute(“items”,options);

Step 2:在JSP中如下使用:

这样就能自动显示所有的选项列表了.

<html:select property="propertyNameInform">

<html:optionsCollection name="listNameInSession" />

</html:select>
而且会自动选中“propertyNameInform”的值所对应的项。




请问 EDI_L() ,为什么能显示出所有的选项呢?哪里做了循环呢?


还有:name="listNameInSession"
这个name属性代表什么呢?


还有你说的org.apache.struts.util.LabelValueBean这个类,是做什么用的?


设定默认值原理很简单 ,用传过来的参数值和你select 循环过程中的 value值进行对比,那个相等那个就设定为默认值。具体跟你用的自定义标签也有关系。


比如 接上面的
<%
String id = request.getParameters("id");
%>
<select name="theType">
<%
for(int i=0;i{
if(ds.getItemString(i+1,"typeId").euqals(id))
{//如果相等,就设定其选中
%>
<option value="<%=ds.getItemString(i+1,"typeId")%>" selected><%=ds.getItemString(i+1,"typeName")%></option>
<%
}
else
{
%>
<option value="<%=ds.getItemString(i+1,"typeId")%>"><%=ds.getItemString(i+1,"typeName")%></option>
<%
}
}
%>
</select>

以上程序为最简单的处理过程,也是最原始的,程序只表达思路,并未作测试


请问 EDI_L() ,为什么能显示出所有的选项呢?哪里做了循环呢?
--<html:optionsCollection name="listNameInSession" />这个标签自己做循环

还有:name="listNameInSession",这个name属性代表什么呢?
--listNameInSession代表了你要做循环的Collection对象
例如,EDI_L()在例子中写了request.setAttribute(“items”,options);
那么名字是“items”的对象就放到request里面了
你用<html:optionsCollection name="items" />,就可以自动循环出来

还有你说的org.apache.struts.util.LabelValueBean这个类,是做什么用的?
--名-值结构的对象,就表示每个option。
把一组这个对象放到前面的“items”里面


==============================================================
简单来说,楼主还是学习structs标签的用法先,境界还差不少。
如果jsp熟的话就直接写脚本,不要用标签。


谢谢fellow99(Fellow)!
还有个问题:
这样就能自动显示所有的选项列表了.

<html:select property="propertyNameInform">

<html:optionsCollection name="listNameInSession" />

</html:select>
而且会自动选中“propertyNameInform”的值所对应的项。

这里的“propertyNameInform的值所对应的项”这句话是什么意思啊?property属性不应该是和ActionFormBean里面的某个属性对应的吗?我想让下拉列表默认选中的是那个要被添加子类的父类的名字。


你说对了,property属性就是ActionFormBean里面的某个属性对应的
假设假设这个form有个属性叫做value,而且这个value的值从客户端发过来等于'aaaaa',那么——
标签应该写成:<html:select property="value">
翻译过来就应该是:<select name="value" value="aaaaa">


另外,自动选中是这样子的——
<html:optionsCollection name="listNameInSession" />枚举的时候,每个值都会跟value比较,如果等于'aaaaa'的话就在所产生<option>标签上加一个selected属性。


我是这样写的:




可是,并没有自动选中87这一项阿?
这是为什么呢?


请问你这里的:
翻译过来就应该是:<select name="value" value="aaaaa">
aaaaa这个值,是怎么传过来的呢?放在一个actionformbean里,然后request过来的吗?


问题解决了,用html:select标签的name属性来指定要默认选中的值的那个bean就行了


↑返回目录
前一篇: 求助~~~Exception report
后一篇: tomcat5配置连接池后能正常使用,但为什么在toad中看不到连接