微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – Struts 1 ActionForm中的单选按钮没有“已选中”

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

当我加载页面时,未设置无线电输入的值(已检查属性),但复选框是.

表格定义:

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

电台(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)">

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

我的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.

更新

但是,以下无线电输入可以正常工作(正如您在“已检查”属性中看到的那样:

电台(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编辑输入以使用值之后,仍然没有在加载时设置checked属性.

更新(5/10/15)

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

解决方法

首先,布尔只有真或假.不是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>

最好使用autoBoxed布尔对象而不是布尔值.以这种方式,必须将值设置为布尔值,以使其包含值.

这样做还会在您的代码显示一个逻辑问题.

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

当您的布尔值总是设置为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);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


1.Linux实时查看Java接口数据的方法 在Linux系统中实时查看Java接口数据通常涉及几个步骤: (1)编写Java应用程序:首先,我们需要有一个Java应用程序,它暴露了一个或多个HTTP接口。这些接口应该返回我们想要实时查看的数据。 (2)使用HTTP工具或库:在Linux上,我们可以
应用场景 C端用户提交工单、工单创建完成之后、会发布一条工单创建完成的消息事件(异步消息)、MQ消费者收到消息之后、会通知各处理器处理该消息、各处理器处理完后都会发布一条将该工单写入搜索引擎的消息、最终该工单出现在搜索引擎、被工单处理人检索和处理。 事故异常体现 1、异常体现 从工单的流转记录发现、
线程类,设置有一个公共资源 package cn.org.chris.concurrent; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @Descrip
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量
Java 9中JShell中的不同启动脚本是什么?
使用Java的位填充错误检测技术
java中string是什么