<html:option></html:option>转化成<option></option>时加了selected属性

本文详细介绍了Struts1框架中html:select与html:option标签的使用方法,包括如何创建下拉列表、设置列表大小及多选等功能,并探讨了如何在ActionForm中获取用户的选择值。

一、概念介绍

stust1中html标签的使用,其中有html:select,html:option,详情如下

<html:select>

<html:select>用来在网页上产生选择列表。通常它与<html:option>等选项标记连用。示例代码如下:

<html:select property="testString" size="1">
    <html:option value="value1">Show Value1</html:option>
    <html:option value="value2">Show Value2</html:option>
    <html:option value="value3">Show Value3</html:option>
    <:html:submit property="submit" value="提交"/> </html:select>

其中,property表示该选择列表与ActionForm中对应的属性名。当用户点击提交后,会在测试页面看到用户所选中的选项的值。以下是代码的运行效果:

 

Show Value1 Show Value2 Show Value3

 

<html:select>有一个size属性,它表示同时显示的选项的数目,如上例中的size为1,则只同时显示一个选项。还有一个multiple属性,当其为true时,该选择列表就允许多选。用户可以通过鼠标的拖动,或是按住Ctrl键进行多选。

以下是multiple="true"和size="8"例子

value1 value2 value3 value4 value5 value6 value7 value8 value9 value10

当multiple属性为true时,在ActionForm中对应的属性应是一个数组类型以便同时向其赋上用户选中的多个值。

<html:option>

<html:option>标记是<html:select>标记的选项,每个<html:option>将在选择框中代表一个选项。有如下代码所示:

<html:select property="testString" size="1">
    <html:option value="value1">Show Value1</html:option>
    <html:option value="value2">Show Value2</html:option>
    <html:option value="value3">Show Value3</html:option>
</html:select>

一个选项有两部分重要的内容。第一就是它所显示给用户的内容,这可以通过以下方式来指定:

    <html:option value="value1">Show Value1</html:option>

可以看出,使用两个<html:option>间的部分来表示用户所见到的内容。当然,也可以使用<html:option> 所带的key和bundle等属性用来指定所在资源文件中的内容,以此来表示用户所见到的内容。其中,bundle和key属性的用法请参看"配置文件"相关章节。

另一个重要的内容就是它所传递给ActionForm的值。这是由标记的value属性指定的。如上面的例子中,value的值分别为 value1,value2和value3,当用户选中某个标记时,JSP页面就会将该标记所对应的value传给ActionForm中相应的属性。

以下是运行效果:

Show Value1 Show Value2 Show Value3


二、不能不说的秘密

<html:option></html:option>转化成<option></option>时加了selected属性,RTFSC,看源码

if(selectTag().isMatched(value))
    results.append(" selected=\"selected\"");


public boolean isMatched(String value)
            {
/* <-MISALIGNED-> */ /* 126*/        if(match == null || value == null)
/* <-MISALIGNED-> */ /* 127*/            return false;
/* <-MISALIGNED-> */ /* 130*/        for(int i = 0; i < match.length; i++)
/* <-MISALIGNED-> */ /* 131*/            if(value.equals(match[i]))
/* <-MISALIGNED-> */ /* 132*/                return true;
/* <-MISALIGNED-> */ /* 135*/        return false;
            }


if(value != null)
                {/* 234*/            match = new String[1];
/* 235*/            match[0] = value;
                } else
                {
/* 238*/            Object bean = TagUtils.getInstance().lookup(super.pageContext, name, null);
/* 239*/            if(bean == null)
                    {/* 240*/                JspException e = new JspException(messages.getMessage("getter.bean", name));


/* 243*/                TagUtils.getInstance().saveException(super.pageContext, e);
/* 244*/                throw e;
                    }


/* 248*/            try
                    {
/* <-MISALIGNED-> */ /* 248*/                match = BeanUtils.getArrayProperty(bean, property);    //获取form中的select的value值
/* <-MISALIGNED-> */ /* 249*/                if(match == null)
/* <-MISALIGNED-> */ /* 250*/                    match = new String[0];
                    }
/* 254*/            catch(IllegalAccessException e)
                    {
/* <-MISALIGNED-> */ /* 254*/                TagUtils.getInstance().saveException(super.pageContext, e);
/* <-MISALIGNED-> */ /* 255*/                throw new JspException(messages.getMessage("getter.access", property, name));
                    }


三、没有解决的问题,用html:option怎么设置默认选中,其中没有selected属性疑问



<think>好的,我现在需要分析用户提供的这段HTML/Spring表单代码,并解答为什么参数有值但页面上没有回显的问题。首先,我需要仔细看一下代码的结构和可能存在的问题。 用户提供的代码是一个使用Spring表单标签的<select>元素,其中包含多个<option>。根据用户描述,当参数(jszt)有值,页面上没有正确显示对应的选项。我需要逐步检查可能的原因。 首先,我应该确认表单对象是否正确绑定。在Spring MVC中,<form:select>标签的path属性应该对应到后台模型中的一个属性。例如,path="jszt"意味着模型对象中有一个名为jszt的属性,其值应该用于设置选中的选项。如果模型中没有正确设置该属性,或者属性名不匹配,会导致无法回显。 接下来,检查各个<option>的value值是否正确。用户代码中的选项值包括"新品"、"堪用品"、"待修品"、"废品",这些都是中文字符串。需要确认后台传递的jszt的值是否与其中一个完全匹配,包括大小写和空格。例如,如果后台传递的是"新品"而选项中的value也是"新品",则没问题,但如果有不一致,比如多了一个空格,就会导致不匹配。 然后,查看是否使用了正确的表单标签库。代码中使用了<form:select>和<form:option>,需要确保页面顶部声明了Spring表单标签库,即<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>。如果没有正确引入标签库,这些标签不会被解析,导致HTML生成不正确,无法回显选中的值。 此外,还要检查生成的HTML代码。有候,虽然Spring标签正确,但生成的HTML可能有问题。例如,检查<option>是否带有selected属性。当表单绑定对象的值与某个optionvalue匹配,Spring应该自动添selected属性。如果没有,可能是因为值不匹配或者绑定失败。 另外,需要考虑是否存在JavaScript或CSS干扰。用户代码中有一个class="input-small"和内联样式style="width:180px",如果这些样式导致下拉框显示异常,可能会让用户误以为没有回显。但更可能的问题是数据绑定问题,而不是样式问题。 最后,可能需要检查控制器层是否正确将参数添到模型中。在Spring控制器中,处理请求的方法应该将包含jszt属性的对象添到模型里,或者在ModelMap中设置该属性,这样才能在视图中正确绑定。 总结可能的原因:1.模型属性未正确设置;2.值不匹配;3.表单标签库未引入;4.生成的HTML有误;5.JS/CSS干扰;6.控制器未正确传值。需要逐一排查这些可能性,找出具体原因。</think>让我们逐步分析代码并排查参数不回显的原因: 1. **检查表单对象绑定** - 确保控制器中向模型添了名为$jszt$的属性 - 示例正确代码: ```java model.addAttribute("formObject", new MyForm()); // MyForm类需包含jszt属性 ``` 2. **验证选项值匹配** - 后台传值必须与option的$value$完全一致 - 常见问题: - 存在空格差异(如"新品 "带空格) - 大小写不一致(如"XinPin" vs "新品") - 编码问题(中文字符乱码) 3. **确认标签库声明** - 检查JSP页面头部必须有: ```jsp <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> ``` 4. **检查生成的HTML** - 正确情况应生成: ```html <option value="新品" selected>新品</option> ``` - 如果缺少$selected$属性,说明绑定失败 5. **排查数据传递流程** - 推荐检查顺序: ```mermaid graph TD A[控制器设置jszt值] --> B[表单对象绑定] B --> C[标签库解析] C --> D[HTML生成] D --> E[浏览器渲染] ``` 6. **常见解决方案** - 添默认选项处理: ```jsp <form:option value="" disabled="true">请选择</form:option> ``` - 增绑定验证: ```java @PostMapping("/submit") public String submitForm(@ModelAttribute("formObject") @Valid MyForm form) { // ... } ``` 7. **调试建议** - 在JSP页面添调试代码: ```jsp 当前jszt值:${formObject.jszt} ``` - 使用浏览器开发者工具检查: - 网络选项卡确认响应内容 - 元素检查器查看实际生成的HTML 请按照上述步骤逐步排查,重点检查值匹配和表单对象绑定这两个最常见问题根源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值