第一步编写DataGridColumnTag(表格列)
public class DataGridColumnTag extends BaseGeneralVarTagBinding{
@Override
public void render() {
}
}
第二步编写DataGridOptTag(操作列)
public class DataGridOptTag extends BaseGeneralVarTagBinding{
@Override
public void render(){
}
}
第三步编写DataGridTag(表格属性)
/**
* @ClassName: DateGridTag
* @Description:表格标签
* @author 杨力
* @date 2016年11月28日 下午9:39:31
*
*/
public class DataGridTag extends BaseGeneralVarTagBinding{
public List<DataGridOpt> columnOptList = new ArrayList<>();//操作列集合
public List<DataGridColumn> columnImgList = new ArrayList<>();//操作列集合
protected List<DataGridColumnReplace> columnValueList = new ArrayList<DataGridColumnReplace>();// 值替换集合
protected List<DataGridColumn> columnQueryList = new ArrayList<DataGridColumn>();// 查询列集合
public String tableName;//表名
@Override
public void render() {
this.getBodyContent();
DataGrid dataGrid = initParam(DataGrid.class, super.args);
tableName = dataGrid.getId();
StringBuffer buffer = new StringBuffer();
StringBuffer queryBuffer = new StringBuffer();
try {
setTableBegin(dataGrid, buffer);
List<TagNestContext> columnList = getColumn();
for (TagNestContext column : columnList) {
if("tr".equals(column.getTags()[0])){
setColumn(initParam(DataGridColumn.class, column.getTags()), buffer);
}else if("opt".equals(column.getTags()[0])){
columnOptList.add(initParam(DataGridOpt.class, column.getTags()));
}
}
setTableEnd(dataGrid, buffer);
buffer.append("<script type=\"text/javascript\">");
setSearchForm(buffer,dataGrid);//设置查询
setOptColumn(buffer);//组装操作列
setReplace(buffer);//组装替换列
getImgColumn(buffer);//组装图片列
buffer.append("</script>");
setSearchPage(dataGrid, queryBuffer);//设置搜索表单
queryBuffer.append(buffer);
ctx.byteWriter.writeString(queryBuffer.toString());
clearList();//清理集合
} catch (IOException e) {
e.printStackTrace();
}
}
public void setSearchPage(DataGrid dataGrid,StringBuffer buffer){
if(dataGrid.isShowSearch()){
buffer.append("<div class=\"row\" style=\"padding-left:0px\">\n");
buffer.append("<form id=\"form_"+tableName+"\">\n");
buffer.append("<div class=\"col-sm-12 col-xs-12\">\n");
for (DataGridColumn columnQuery : columnQueryList) {
buffer.append("<div class=\"col-sm-2 col-xs-2\" style=\"padding-left:0px\">");
if (ToolString.isNotEmpty(columnQuery.getReplace()))
{
buffer.append("<select name=\""+ columnQuery.getField()+ "\"");
buffer.append(" id=\""+ columnQuery.getField()+"\"");
buffer.append(" class=\"input-sm form-control input-s-sm inline\"> ");
buffer.append("<option value =\"\" >---请选择---</option>");
String[] test = columnQuery.getReplace().split(",");
String text = "";
String value = "";
for (String string : test)
{
text = string.split("_")[0];
value = string.split("_")[1];
buffer.append("<option value =\"" + value
+ "\">" + text + "</option>");
}
buffer.append("</select>");
}
else if (ToolString.isNotEmpty(columnQuery.getDict()))
{
List<TType> typeList = CacheKit.get(Constant.CACHE_NAME_SYSTEM_TYPE, ThreadParamInit.CACHESTART_TYPE + columnQuery.getDict());
buffer.append("<select name=\""+ columnQuery.getField()+"\"");
buffer.append(" id=\""+ columnQuery.getField()+"\"");
buffer.append(" class=\"input-sm form-control input-s-sm inline\"> ");
buffer.append("<option value =\"\" >---请选择---</option>");
for (TType type : typeList)
{
buffer.append("<option value=\""
+ type.getStr("code") + "\">");
buffer.append(type.getStr("name"));
buffer.append(" </option>");
}
buffer.append("</select>");
}else if("group".equals(columnQuery.getQueryMode())){
buffer.append("<input class=\"easyui-datetimebox\" type=\"text\" id="
+ columnQuery.getField() + "/ name=\""
+ columnQuery.getField()
+ "_begin\" style=\"width: 100px;height:25px;\" data-options=\"showSeconds:false\" />");
buffer.append("<span style=\"display:-moz-inline-box;display:inline-block;width: 8px;text-align:right;\">~</span>");
buffer.append("<input class=\"easyui-datetimebox\" type=\"text\" id="
+ columnQuery.getField() + "_end name=\""
+ columnQuery.getField()
+ "_end\" style=\"width: 100px;height:25px;\" data-options=\"showSeconds:false\" />");
}else{
buffer.append("<input placeholder=\"请输入"+columnQuery.getText()+"\" class=\"input-sm form-control input-s-sm\" maxlength=\"20\" id=\""+columnQuery.getField()+"\" name=\""+columnQuery.getField()+"\" type=\"text\">");
}
buffer.append("</div>");
}
buffer.append("<div class=\"pull-right\">\n");
buffer.append("<button type=\"button\" onclick=\"clean_"+tableName+"()\" class=\"btn btn-white btn-sm\"><i class=\"fa fa-refresh\"></i> 重置</button>\n");
buffer.append("</div>\n");
buffer.append("<div class=\"col-md-3 col-sm-3 col-xs-3 pull-right\">");
buffer.append("<div class=\"input-group m-b-xs\">\n");
buffer.append("<input type=\"text\" name=\"searchName\" maxlength=\"15\" placeholder=\"请输入关键词\" class=\"input-sm form-control input-s-sm\"> <span class=\"input-group-btn\">\n");
buffer.append("<button onclick=\"search_"+tableName+"()\" type=\"button\" class=\"btn btn-sm btn-primary\"><i class=\"fa fa-search\"></i>搜索</button> </span>\n");
buffer.append("</div>\n");
buffer.append("</div>\n");
buffer.append("</div>\n");
buffer.append("</form>\n");
buffer.append("</div>");
}
}
public void setTableBegin(DataGrid dataGrid,StringBuffer buffer){
buffer.append("<table fit=\"true\" id=\""+dataGrid.getId()+"\" toolbar=\"#toolbar_"+tableName+"\" ");
//判断是否需要初始化
if(dataGrid.isInitGrid()){
if(dataGrid.isTreeTable()){
buffer.append("class=\"easyui-treegrid\" ");
}else{
buffer.append("class=\"easyui-datagrid\" ");
}
}
buffer.append("style=\"width:100%\"");
buffer.append("data-options=\"");
buffer.append("url:'"+dataGrid.getUrl()+"'");
if(dataGrid.isTreeTable()){
buffer.append(",idField:'"+dataGrid.getIdField()+"'");
buffer.append(",treeField:'"+dataGrid.getTreeField()+"'");
}
buffer.append(",fitColumns:true");
buffer.append(",singleSelect:"+dataGrid.isSingleSelect());
buffer.append(",pageSize:"+dataGrid.getPageSize());
buffer.append(",pageList:["+dataGrid.getPageSize()+","+(dataGrid.getPageSize()+10)+","+(dataGrid.getPageSize()+20)+","+(dataGrid.getPageSize()+30)+"]");
buffer.append(",pagination:"+dataGrid.isPagination());
buffer.append("\"");
buffer.append("><thead><tr>");
if(dataGrid.isCheckbox()){
buffer.append("<th data-options=\"field:'"+dataGrid.getIdField()+"',checkbox:true\"></th>");
}
}
public void setTableEnd(DataGrid dataGrid,StringBuffer buffer){
buffer.append("</tr></thead></table>");
}
public void setColumn(DataGridColumn column,StringBuffer buffer){
buffer.append("<th ");
buffer.append("data-options=\"");
if(ToolString.isNotEmpty(column.getField())){
buffer.append("field:'"+column.getField()+"'");
}
if(ToolString.isNotEmpty(column.getAlign())){
buffer.append(",align:'"+column.getAlign()+"'");
}
if(column.getHidden()){
buffer.append(",hidden:'"+column.getHidden()+"'");
}
if("opt".equals(column.getField())){
buffer.append(",formatter:formatter_opt_"+tableName+"");
}else{
if(ToolString.isNotEmpty(column.getFormatter())){
buffer.append(",formatter:"+column.getFormatter()+"");
}
if(ToolString.isNotEmpty(column.getDict())||ToolString.isNotEmpty(column.getReplace())){
buffer.append(",formatter:"+column.getField()+"Replace");
}
if(column.getImage()){
buffer.append(",formatter:"+column.getField()+"Img");
}
}
if(ToolString.isNotEmpty(column.getWidth())){
buffer.append(",width:"+column.getWidth()+"");
}
buffer.append("\">"+column.getText()+"</th>");
//值替换
if (ToolString.isNotEmpty(column.getReplace()))
{
String[] test = column.getReplace().split(",");
String text = "";
String value = "";
for (String string : test)
{
text += string.substring(0, string.indexOf("_")) + ",";
value += string.substring(string.indexOf("_") + 1) + ",";
}
setColumnReplace(column.getField(), text, value);
}
//数据字典
if (ToolString.isNotEmpty(column.getDict()))
{
String text = "";
String value = "";
List<TType> typeList = CacheKit.get(Constant.CACHE_NAME_SYSTEM_TYPE, ThreadParamInit.CACHESTART_TYPE + column.getDict());
if (typeList != null && !typeList.isEmpty())
{
for (TType type : typeList)
{
text += type.getName() + ",";
value += type.getCode() + ",";
}
setColumnReplace(column.getField(), text, value);
}
}
//图片列
if(column.getImage()){
columnImgList.add(column);
}
//查询列
if(column.getQuery()){
columnQueryList.add(column);
}
}
public void setOptColumn(StringBuffer buffer){
TagUtil.setOptColumn(columnOptList, buffer, tableName);
}
public List<TagNestContext> getColumn(){
HttpServletRequest request = (HttpServletRequest) this.ctx.getGlobal("request");
TagNestContext tnc = (TagNestContext) request.getAttribute("tagContext");
List<TagNestContext> list = tnc.getChildren();
return list;
}
/**
* @Title: searchForm
* @Description: 组装搜索方法
* @param @param buffer 设定文件
* @return void 返回类型
* @throws
*/
public void setSearchForm(StringBuffer buffer,DataGrid dataGrid){
//搜索方法开始
buffer.append("function search_"+tableName+"(){\n");
if(dataGrid.treeTable){
buffer.append("$('#"+tableName+"').treegrid('load',\n");
}else{
buffer.append("$('#"+tableName+"').datagrid('load',\n");
}
buffer.append("serializeObject($('#form_"+tableName+"'))\n");
buffer.append(");};");
//清除查询条件、返回初始数据展示状态
if(dataGrid.treeTable){
buffer.append("function clean_"+tableName+"(){$('#"+tableName+"').treegrid('load',{});$(':input','#form_"+tableName+"').not(':button, :submit, :reset') .val('') .removeAttr('checked') .removeAttr('selected');}");
}else{
buffer.append("function clean_"+tableName+"(){$('#"+tableName+"').datagrid('load',{});$(':input','#form_"+tableName+"').not(':button, :submit, :reset') .val('') .removeAttr('checked') .removeAttr('selected');}");
}
}
public void clearList(){
tableName = null;
columnOptList.clear();
columnValueList.clear();
columnImgList.clear();
columnQueryList.clear();
}
/**
* @Title: 获取图片列方法
* @author:YangLi
* @param @param buffer 设定文件
* @return void 返回类型
* @throws
*/
private void getImgColumn(StringBuffer buffer){
for (DataGridColumn column : columnImgList) {
buffer.append("function "+column.getField()+"Img(value,rec,index){");
if(ToolString.isEmpty(column.getImageWidth())){
buffer.append(" if(value == \"\" || value == null){return '<img width=\"50px\" border=\"0\" src=\"/common/plug-in/main/images/zanwu.jpg\"/>'}");
buffer.append(" return '<img width=\"50px\" border=\"0\" src=\"'+value+'\"/>'}");
}else{
buffer.append(" if(value == \"\" || value == null){return '<img width=\""+column.getImageWidth()+"\"px border=\"0\" src=\"/common/plug-in/main/images/zanwu.jpg\"/>'}");
buffer.append(" return '<img width=\""+column.getImageWidth()+"\"px border=\"0\" src=\"'+value+'\"/>'}");
}
}
}
/**
*
* <b>Summary: </b> setColumn(设置字段替换值)
*
* @param name
* @param text
* @param value
*/
public void setColumnReplace(String name, String text, String value)
{
DataGridColumnReplace columnValue = new DataGridColumnReplace();
columnValue.setName(name);
columnValue.setText(text);
columnValue.setValue(value);
columnValueList.add(columnValue);
}
protected void setReplace(StringBuffer buffer){
// 值替換
if (columnValueList.size() > 0)
{
for (DataGridColumnReplace columnValue : columnValueList)
{
String testString = "";
String[] value = columnValue.getValue().split(",");
String[] text = columnValue.getText().split(",");
buffer.append("function "+columnValue.getName()+"Replace(value,rec,index){");
for (int j = 0; j < value.length; j++)
{
if(value[j] == "' '" || "' '".equals(value[j])){
value[j] = "";
}
testString += "if(value=='" + value[j]+ "'){return \'" + text[j] + "\'}";
}
buffer.append(testString);
buffer.append("else{return value}");
buffer.append("}");
}
}
}
}
第四步编写标签工具类TagUtil
/**
*
* @ClassName : TagUtil
* 标签工具类
* @author : YangLi
* @date : 2015年6月3日 下午2:30:29
*
*/
@SuppressWarnings({ "rawtypes", "unchecked" ,"static-access"})
public class TagUtil {
/**
* @Title: setOptColumn
* @Description: 设置操作列
* @param @param listOpt
* @param @param buffer
* @param @param tableName 设定文件
* @return void 返回类型
* @throws
*/
public static void setOptColumn(List<DataGridOpt> listOpt,StringBuffer buffer,String tableName){
if(listOpt == null || listOpt.size() == 0) return;
buffer.append("function formatter_opt_"+tableName+"(val,row,index){ ");
buffer.append("var href='';");
String url = null;
for (DataGridOpt opt : listOpt) {
url = opt.getUrl();
MessageFormat formatter = new MessageFormat("");
if (opt.getValue() != null)
{
String[] testvalue = opt.getValue().split(",");
List value = new ArrayList<Object>();
for (String test : testvalue)
{
value.add("\"+row." + test + " +\"");
}
url = formatter.format(url, value.toArray());
}
if (url != null && opt.getValue() == null)
{
url = formatUrl(url);
}
String exp = opt.getExp();// 判断显示表达式
if (ToolString.isNotEmpty(exp))
{
String[] ShowbyFields = exp.split("&&");
for (String ShowbyField : ShowbyFields)
{
int beginIndex = ShowbyField.indexOf("#");
int endIndex = ShowbyField.lastIndexOf("#");
String exptype = ShowbyField.substring(beginIndex + 1,
endIndex);// 表达式类型
String field = ShowbyField.substring(0, beginIndex);// 判断显示依据字段
String[] values = ShowbyField.substring(endIndex + 1,
ShowbyField.length()).split(",");// 传入字段值
String value = "";
for (int i = 0; i < values.length; i++)
{
value += "'" + "" + values[i] + "" + "'";
if (i < values.length - 1)
{
value += ",";
}
}
if ("eq".equals(exptype))
{
buffer.append("if($.inArray(\"\"+row." + field + ",[" + value
+ "])>=0){");
}
if ("ne".equals(exptype))
{
buffer.append("if($.inArray(\"\"+row." + field + ",[" + value
+ "])<0){");
}
if ("empty".equals(exptype) && value.equals("'true'"))
{
buffer.append("if(\"\"+row." + field + "==''){");
}
if ("empty".equals(exptype) && value.equals("'false'"))
{
buffer.append("if(\"\"+row." + field + "!=''){");
}
}
}
if (OptTypeDirection.del.toString().equals(opt.getType()))
{
buffer.append("href+=\"<button class='btn btn-sm btn-outline ");
buffer.append(opt.getButtonClz()+"\'");
buffer.append(" onclick=delObj(\'" + url+ "\',\'" + tableName + "\')");
buffer.append(" type=\'button\'>");
buffer.append("<i class=\'fa "+opt.getIconClz()+"\'></i>");
buffer.append(" "+opt.getText());
buffer.append("</button> \";");
}
if (OptTypeDirection.fun.toString().equals(opt.getType()))
{
String name = TagUtil.getFunction(opt.getFunname());
String parmars = TagUtil.getFunParams(opt.getFunname());
buffer.append("href+=\"<button class='btn btn-sm btn-outline ");
buffer.append(opt.getButtonClz()+"\'");
buffer.append(" onclick="+name+"("+parmars+")");
buffer.append(" type=\'button\'>");
buffer.append("<i class=\'fa "+opt.getIconClz()+"\'></i>");
buffer.append(" "+opt.getText());
buffer.append("</button> \";");
}
if (OptTypeDirection.openwin.toString().equals(opt.getType()))
{
buffer.append("href+=\"<button class='btn btn-sm btn-outline ");
buffer.append(opt.getButtonClz()+"\'");
buffer.append(" onclick=addPage(\'" + url+ "\',\'" + opt.getText() + "\')");
buffer.append(" type=\'button\'>");
buffer.append("<i class=\'fa "+opt.getIconClz()+"\'></i>");
buffer.append(" "+opt.getText());
buffer.append("</button> \";");
}
if (ToolString.isNotEmpty(exp))
{
for (int i = 0; i < exp.split("&&").length; i++)
{
buffer.append("}");
}
}
}
buffer.append("return href;}");
}
/**
* 获取自定义函数名
*
* @param functionname
* @return
*/
public static String getFunction(String functionname) {
int index = functionname.indexOf("(");
if (index == -1) {
return functionname;
} else {
return functionname.substring(0, functionname.indexOf("("));
}
}
/**
* 获取自定义函数的参数
*
* @param functionname
* @return
*/
public static String getFunParams(String functionname) {
int index = functionname.indexOf("(");
String param="";
if (index != -1) {
String testparam = functionname.substring(functionname.indexOf("(")+1,
functionname.length() - 1);
if(ToolString.isNotEmpty(testparam))
{
String[] params=testparam.split(",");
for (String string : params) {
//是数字表示,手动传入状态
if(ToolString.isNumeric(string)){
param+= string.replaceAll("_", "")+",";
}else{
param+="'\"+row."+ string + "+\"',";
}
}
}
}
param+="'\"+index+\"'";//传出行索引号参数
return param;
}
/**
* 格式化URL
*
* @return
*/
private static String formatUrl(String url)
{
String parurlvalue = "";
if (url.indexOf("?") >= 0)
{
String beforeurl = url.substring(0, url.indexOf("?"));// 截取请求地址
String parurl = url.substring(url.indexOf("?") + 1, url.length());// 截取参数
String[] pras = parurl.split("&");
List value = new ArrayList<Object>();
int j = 0;
for (int i = 0; i < pras.length; i++)
{
if (pras[i].indexOf("{") >= 0 || pras[i].indexOf("#") >= 0)
{
String field = pras[i].substring(pras[i].indexOf("{") + 1,
pras[i].lastIndexOf("}"));
if(i == 0){
parurlvalue += "?"+ pras[i].replace("{" + field + "}", "{" + j + "}");
}else{
parurlvalue += "&"+ pras[i].replace("{" + field + "}", "{" + j + "}");
}
value.add("\"+row." + field + " +\"");
j++;
}
else
{
parurlvalue += "" + pras[i];
}
}
url = MessageFormat.format(beforeurl + parurlvalue, value.toArray());
}
return url;
}
}