从jsp到struts2动作类获取禁用的真实数据

时间:2011-11-08 09:43:18

标签: java jsp struts2

我的jsp中有disabled=true个文本框和combox框。

当我尝试将这些值映射回动作时,它们会消失。

我不想再次打电话给DB。

如何将disabled=true textboxescombo boxes的数据值设置为hidden values

非常感谢。

1 个答案:

答案 0 :(得分:4)

与表单一起提交的禁用元素值的属性不是struts2的问题,而是HTML行为。要处理此行为,请使用以下实现:

  1. 使用readonly =“readonly”属性来阻止修改而不是使用禁用。 (这不适用于少数元素)
  2. 使用onfocus =“return false”以防止对html元素进行任何关注。这样可以防止修改它们的价值。您可以使用CSS使这些元素看起来像只读或禁用。
  3. 在禁用元素之前,请创建一个隐藏元素并附加要禁用的元素的值。这将确保该项目被提交。
  4. 请参阅以下针对select元素的实现。您可以使用s:select的id属性来设置select元素的html id。

    <select id="demoSelect" class="readonly">
        <option value="0">A</option>
        <option value="1">B</option>
        <option value="2" selected="selected">C</option>
        <option value="3">D</option>
        <option value="4">E</option>
        <option value="5">F</option>
    </select>
    <input type="hidden" value="2" name="demoSelectDefault"/>
    

    jQuery的:

    $(document).ready(
    
        function() {
            $("select.readonly").live('change', function() { //live() makes sure that this is executed if you apply the class to the element even after the initial load. So, if you set the readonly class to a select element, you are done.
                var selectElement = this;       
                $("input[type=hidden][name=" + this.id + "Default]").each( //This is implemented in case of multiple select support. You will need to select nothing at first and then make this select each of this element
                    function() {
                        selectElement.value = this.value;
                    }
                );
    
            });
        }
    
    );
    

    这里,当你使用struts实现它时,填充s:select,然后使用s:hidden元素生成相应的默认值。