是、否、空白值需要布尔转换器Struts2

是、否、空白值需要布尔转换器Struts2,struts2,boolean,Struts2,Boolean,我需要根据在UI表单元素上选择的值保存数据 <s:select key="invoice.productSold" list="${productSold}" /> ProductSeld值的下拉列表“”(空白)、“是”、“否” 我的布尔转换器 public class BooleanConverter extends StrutsTypeConverter { @Override /*From form*/ public Object convertFromString(

我需要根据在UI表单元素上选择的值保存数据

<s:select key="invoice.productSold" list="${productSold}" />


ProductSeld值的下拉列表“”(空白)、“是”、“否”

我的布尔转换器

public class BooleanConverter extends StrutsTypeConverter {

@Override
/*From form*/
public Object convertFromString(Map context, String[] values, Class toClass) {
        String value = values[0];
        if (value == "") {
            System.out.println("null");
                return null;
        }
        if ("No".equalsIgnoreCase(value) || "0".equals(value)) {
                return "false";
        } else if ("Yes".equalsIgnoreCase(value) || "1".equals(value)) {
                return "true";
        } else {
            return null;
        }
}

@Override
public String convertToString(Map context, Object o) {
        Boolean value = (Boolean) o;
        return String.valueOf(value);
}

}

public class Invoice{

Boolean productSold;
<getter>
<setter>
}

公共类BooleanConverter扩展StrutsTypeConverter{
@凌驾
/*从形式*/
公共对象convertFromString(映射上下文,字符串[]值,类到类){
字符串值=值[0];
如果(值==“”){
System.out.println(“空”);
返回null;
}
如果(“否”。相等信号情况(值)| |“0”。等于(值)){
返回“false”;
}else如果(“是”。相等信号情况(值)| |“1”。等于(值)){
返回“真”;
}否则{
返回null;
}
}
@凌驾
公共字符串convertToString(映射上下文,对象o){
布尔值=(布尔)o;
返回字符串.valueOf(value);
}
}
公共类发票{
布尔产品已售出;
}
问题
  • 我的表格下拉列表选择“是”并更新;更新后,我的下拉列表没有显示“是”。它显示为空白
  • 在窗体上选择“是”时,ConvertFromString方法返回“true”,ConverToString方法返回“false”
  • 动作类
    public UpdateAction扩展了ActionSupport{
    受保护产品清单;
    公共列表GetProductSeld(){
    List myOptions=new ArrayList();
    myOptions。添加(“”);
    myOptions。添加(“是”);
    myOptions.添加(“否”);
    返回选项;
    }
    


    您不需要自定义布尔值转换器,可以使用Struts2国际化功能获取布尔值的“漂亮”文本。 将
    true=Yes
    false=No
    放在消息属性中,然后使用
    标记的
    listValue
    属性调用
    getText
    方法来获取
    true
    false
    的消息

    <s:select key="invoice.productSold" list="productSold" listValue="%{getText(top)}"/>
    
    试试这个:

    public UpdateAction extends ActionSupport{
        protected Map<Object, String> productSold;
        public Map<Object, String> getProductSold() {
            Map<Object, String> myOptions= new HashMap<>();
               myOptions.put(null, "");
               myOptions.put(Boolean.TRUE, "Yes");
               myOptions.put(Boolean.FALSE, "No");
            return myOptions;
    }
    
    public UpdateAction扩展了ActionSupport{
    受保护地图产品已售出;
    公共地图GetProductSeld(){
    Map myOptions=new HashMap();
    myOptions.put(null,“”);
    myOptions.put(Boolean.TRUE,“Yes”);
    myOptions.put(Boolean.FALSE,“No”);
    返回选项;
    }
    
    在JSP中:

    <s:select key="invoice.productSold" listKey="productSold.key"
              listValue="productSold.value"/>
    
    
    
    将ProductSeld设置为类型列表,现在所有值为空的“是”和“否”将被容纳。我不明白,为什么您需要一个
    类型转换器
    ,请使用
    列表=“${ProductSeld}”
    @Jaiwo99添加的操作类发布您的操作。@Rizstien我有它是列表,为什么它有
    ${ProductSeld}
    而不是
    %{productselled}
    ?使用笔直的Struts2标签过着美好的生活…@AndreaLigios:谢谢,错过了,只是从OP问题中复制粘贴。是的,我猜…我的考虑是针对OP顺便说一句:)我忘了+1,很好answer@AleksandrM这是一个表单,我必须选择“是”“否”来提交/更新详细信息。并且我不能使用Struts2标记;因为project有JSP标记。尝试了这个,我没有在表单上的下拉列表中选择是,否
    public UpdateAction extends ActionSupport{
        protected Map<Object, String> productSold;
        public Map<Object, String> getProductSold() {
            Map<Object, String> myOptions= new HashMap<>();
               myOptions.put(null, "");
               myOptions.put(Boolean.TRUE, "Yes");
               myOptions.put(Boolean.FALSE, "No");
            return myOptions;
    }
    
    <s:select key="invoice.productSold" listKey="productSold.key"
              listValue="productSold.value"/>