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 "";
}
}
本文到此结束