c:out标签的escapeXml="false"和动态格式的数据

escapeXml的属性默认为true,将value中的值以字符串的形式原封不动的显示出来。

escapeXML属性值设置为false时. html格式的内容则会被渲染成页面元素.

业务中有场景需要做这样的动态数据.下面上两张效果图应该就更清晰了. 前端框架是jQuery和easyui

如上,我们可以在新增数据时选择数据类型, 保存后在页面显示的数据则被渲染成对应的元素.

主要思路

1.定义一个枚举.里面为 下拉框,输入框,多行文本这些常量.并定义一个方法返回的是对应的html格式的字符串.

2.保存的数据则以枚举作为标记

3.数据的toString方法则调用枚举中的方法,返回html格式的字符串.通过 c:out标签在页面进行渲染

下面上代码

定义一简单接口

public interface CompHtmlTemplateConverter {

    //这几个参数可以按需进行设计.此处设计: name 用来绑定一些属性,如name,id等. value则为默认值,options则用于select的下拉框内容
    String toHtmlTemplate(String name, String value, String options);
}

 

public enum CustomFormCompType implements CompHtmlTemplateConverter {

    TEXT("单行文本") {
        @Override
        public String toHtmlTemplate(String name, String value, String options) {
            //这里很多元素都绑定了一个onchange事件,主要用于修改即触发请求更新内容.这个可以按需设计
            String format = "<input onblur=\"saveForm()\"  type=\"text\" name=\"%1$s\" style=\"width:95%%\" value=\"%2$s\" class=\"easyui-validatebox\"  ></input>";
            return String.format(format, StringUtils.notNullAndTrim(name), StringUtils.notNullAndTrim(value));
        }
    }, TEXTAREA("多行文本") {
        @Override
        public String toHtmlTemplate(String name, String value, String options) {
            String format = "<textarea onblur=\"saveForm()\" name=\"%1$s\" style=\"width:95%%\" rows=\"3\" >%2$s</textarea>";
            return String.format(format, StringUtils.notNullAndTrim(name), value);
        }
    }, SELECT("下拉框") {
        @Override
        public String toHtmlTemplate(String name, String value, String options) {
            StringBuilder body = new StringBuilder("<option value=\"\"></option>");
            String selected = "selected=\"selected\"";
            if (StringUtils.isMeaningFul(options)) {
                for (String opt : options.split(",")) {
                    opt = opt.trim();
                    if (opt.equals("")) continue;
                    body.append(String.format("<option value=\"%1$s\" %2$s>%1$s</option>", opt, opt.equals(value) ? selected : ""));
                }
            }
            String format = "<select onchange=\"saveForm()\" name=\"%1$s\">%2$s</select>";
            return String.format(format, StringUtils.notNullAndTrim(name), body);
        }
    }, DATE_BOX("日期选择") {
        @Override
        public String toHtmlTemplate(String name, String value, String options) {
            String format = "<input type=\"text\" name=\"%1$s\" value=\"%2$s\" class=\"easyui-datebox\" onblur=\"saveForm()\" style=\"height:30px\"></input>";
            return String.format(format, StringUtils.notNullAndTrim(name), StringUtils.notNullAndTrim(value));
        }
    }, DATETIME_BOX("时间选择") {
        @Override
        public String toHtmlTemplate(String name, String value, String options) {
            String format = "<input type=\"text\" name=\"%1$s\" value=\"%2$s\" class=\"easyui-datetimebox\" onblur=\"saveForm()\" style=\"height:30px\"></input>";
            return String.format(format, StringUtils.notNullAndTrim(name), StringUtils.notNullAndTrim(value));
        }
    };

    public String name;
    private CustomFormCompType(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public String getTemplate() {
        return this.toHtmlTemplate(null, null, null);
    }

}

下面附上该数据的实体类.

public class TestEscapeXml{

    private String id;

    private String name;

    private String value;

    private String options;//用于select的下拉框可选内容, ","分隔

    private CustomFormCompType compType;

    private String remark;

    public String toString() {
        if (null != compType) {
            return compType.toHtmlTemplate(id, value, options); //id:用于绑定数据的id, value:用于显示值 options:用于select的下拉内容
        }
        return "";
    }

}

本文到此结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值