java - 单选按钮在 Struts 1 ActionForm 中没有 "checked"

标签 java forms jsp jakarta-ee struts-1

我有一个包含许多问题的 JSP 页面和一个包含输入名称和值的 Map 的 ActionForm。

当我加载页面时,未设置单选输入的值(选中属性),但复选框已设置。

表单定义:

<bean:define id="form" name="questionForm" type="com.example.QuestionForm"/>

radio (jsp):

<html:radio property="<%=\"boolean(\" + questionBase + \"V\" + respLabel + \")\"%>" styleClass="pepperoni1" value="1"  >Yes</html:radio>
<html:radio property="<%=\"boolean(\" + questionBase + \"V\" + respLabel + \")\"%>" styleClass="pepperoni0" value="0"  >No</html:radio>

广播(html):

<input type="radio" class="pepperoni1" value="1" name="boolean(pepperoniVNever)">Yes
<input type="radio" class="pepperoni0" value="0" name="boolean(pepperoniVNever)">No

复选框(jsp):

<html:checkbox property="<%=\"boolean(\" + questionBase + \"V\" + respLabel + \")\"%>" styleClass="pepperoni" />

复选框(html):

<input type="checkbox" class="pepperoni" checked="checked" value="on" name="boolean(pepperoniV1)">

通过 getBoolean/setBoolean 页面加载/表单提交访问时,checked 属性未设置,但值不为空 .

我的 ActionForm 类有这些可用的关联方法:

public void setValue(String key, String value) {
    if (value != null)
        values.put(key, value);
}

public String getValue(String key) {
    return values.get(key);
}

public boolean getBoolean(String key) {
   if (values.get(key) != null){
        if(values.get(key).equalsIgnoreCase("1")){
            return true;
        } else if(values.get(key).equalsIgnoreCase("0")){
            return false;
        }
        return "yes".equalsIgnoreCase(values.get(key));
    }
    return false;
}

public void setBoolean(String key, boolean value) {
    if(value){
        values.put(key, "yes");
    }
}

我在 Ubuntu 14.04 上使用 struts 1.2.7、Hibernate 3、DisplayTag 1.0、OpenJDk 6 和 Tomcat 6。

更新

但是,以下单选输入确实有效(正如您可以通过“checked”属性看到的那样:

radio (jsp):

<html:radio property="<%=\"value(\" + questionBase + \"B)\"%>" value="No">No</html:radio>
<html:radio property="<%=\"value(\" + questionBase + \"B)\"%>" value="Yes">Yes</html:radio>

广播(html):

<input name="value(noteB)" value="Yes" checked="checked" type="radio">
<input name="value(noteB)" value="No" type="radio">

但是在使用 boolean 将输入编辑为使用 value 之后,checked 属性仍未在加载时设置。

更新 (5/10/15)

在进行了 shinjw 推荐的更改后,值被正确保存(这是一个单独的问题)但是当 getBoolen 返回 true 时,某些单选按钮的 checked 属性仍然没有设置。

最佳答案

首先, boolean 值只取真或假。不是 0 或 1

<html:radio property="<%=\"boolean(\" + questionBase + \"V\" + respLabel + \")\"%>" styleClass="pepperoni1" value="true"  >Yes</html:radio>
<html:radio property="<%=\"boolean(\" + questionBase + \"V\" + respLabel + \")\"%>" styleClass="pepperoni0" value="false"  >No</html:radio>

最好使用自动装箱的 Boolean 对象而不是 boolean。这样,必须将一个值设置为您的 boolean 值,以便它包含一个值。

这样做还会揭示代码中的逻辑问题。

public void setBoolean(String key, boolean value) {
    values.put(key, value ? "yes" : "");
}

当您的 boolean 值总是设置为 false 时,您认为会发生什么? public void setBoolean(String key, boolean value) { values.put(key, value ? "yes": "");

这样的事情可能是一个更好的解决方案

Map<String, Boolean> values = new Hashmap<String,Boolean>

public void setBoolean(String key, Boolean value) {
    values.put(key, value);
}

关于java - 单选按钮在 Struts 1 ActionForm 中没有 "checked",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29925683/

相关文章:

python - 当顺序无关紧要时,为 Web 构建适当的 SQL 查询

java - 为应用程序创建用户名和密码

java - 我可以为任何 HTTP 客户端错误代码 (4XX) 和 HTTP 服务器错误代码 (5XX) 定义 JSP 自定义错误页面吗?

java - 创建其他测试的 Junit 测试

java - 是否有可能开发一个完全存在于 JVM 中的操作系统?

java - springkafka-template 发送方法回调未注册的可能性

java - 如何在jsp页面中显示图片?

java - (另一个)Neo4j 插件未显示在扩展中

javascript - 如何将表单数据发布到 Google Apps 脚本

html - 如何在没有表格的情况下设计和对齐表格?