package com.nfwork.dbfound.web.ui; import javax.servlet.jsp.JspTagException; import javax.servlet.jsp.tagext.Tag; import com.nfwork.dbfound.util.DataUtil; import com.nfwork.dbfound.util.LogUtil; import com.nfwork.dbfound.exception.TagLocationException; import com.nfwork.dbfound.web.i18n.MultiLangUtil; public class Column extends EventTag { private static final long serialVersionUID = 1L; private String name; private String width = "100"; private String prompt; private String renderer; private String editor; private String align; private boolean required = false; private String displayField = "name"; private String options; private String valueField = "code"; private String mode = "local"; // remote private boolean locked = false; private boolean upper = false; private boolean sortable = false; private String lovUrl; private String lovWidth; private String lovHeight; private boolean allowDecimals = true; // 允许小数点 private boolean allowNegative = true; // 允许负数 private boolean editable = true; // combo,lov之类的弹出组件 是否可以编辑 private boolean hidden; private String vtype; private String precision; public int doEndTag() throws JspTagException { Tag t = findAncestorWithClass(this, Columns.class); if (t == null) { throw new TagLocationException("column标签" + name + "位置不正确,只能在columns标签里面使用"); } Columns columns = (Columns) t; Column column = null; try { column = (Column) this.clone(); } catch (CloneNotSupportedException e) { LogUtil.error(e.getMessage(), e); } if (column.editor != null && !"".equals(column.editor)) { // 是否为空加载 String editorConfig; if (column.required) { editorConfig = "{allowBlank:false"; } else { editorConfig = "{allowBlank:true"; } if (column.editable == false) { editorConfig = editorConfig + ",editable : false"; } if (column.vtype != null) { editorConfig = editorConfig + ",vtype : '" + vtype + "'"; } // 添加事件 String listeners = ",enableKeyEvents : true,listeners: {"; if (upper) { listeners += "keypress :function(t, e){DBFound.keypress(t, e,this);},blur:function(){DBFound.blurUpper(this);},"; } for (Event event : events) { if ("enter".equals(event.getName())) { listeners += "specialKey:function(field,e){if(e.getKey()==Ext.EventObject.ENTER)" + event.getHandle() + "(field,e);}"; } else { listeners += event.getName() + ":" + event.getHandle() + ","; } } if (listeners.endsWith(",")) { listeners = listeners.substring(0, listeners.length() - 1) + "}"; editorConfig = editorConfig + listeners; } // 编辑器加载 if ("textfield".equals(column.editor)) { editorConfig = editorConfig + "}"; column.editor = "new Ext.form.TextField(" + editorConfig + ")"; } else if ("numberfield".equals(column.editor)) { if (allowDecimals == false) { editorConfig = editorConfig + ",allowDecimals:false"; } if (allowNegative == false) { editorConfig = editorConfig + ",allowNegative:false"; } editorConfig = editorConfig + "}"; column.editor = "new Ext.form.NumberField(" + editorConfig + ")"; } else if ("datefield".equals(column.editor)) { editorConfig = editorConfig + ",format:'Y-m-d'"; editorConfig = editorConfig + "}"; column.editor = "new Ext.form.DateField(" + editorConfig + ")"; // 在用户没有指定renderer时,使用默认的renderer if (DataUtil.isNull(column.renderer)) { column.renderer = "$D.dateFormat"; } } else if ("combo".equals(column.editor)) { editorConfig = editorConfig + ",store:" + options; editorConfig = editorConfig + ",displayField:'" + displayField + "'"; editorConfig = editorConfig + ",valueField:'" + valueField + "'"; editorConfig = editorConfig + ", triggerAction:'all' "; editorConfig = editorConfig + ",selectOnFocus:true "; editorConfig = editorConfig + ",mode : '" + mode + "'"; editorConfig = editorConfig + "}"; column.editor = "new Ext.form.ComboBox(" + editorConfig + ")"; // 在用户没有指定renderer时,使用默认的renderer if (DataUtil.isNull(column.renderer)) { column.renderer = "function(value){return DBFound.gridComboRenderer(value,'" + valueField + "','" + displayField + "'," + options + ");}"; } } else if ("lov".equals(column.editor)) { if (column.lovHeight == null) { column.lovHeight = "440"; } if (column.lovWidth == null) { column.lovWidth = "600"; } Grid g = (Grid) findAncestorWithClass(this, Grid.class); if (lovUrl == null) lovUrl = "null"; String lovFunction = "function(){$D.openLov(" + g.getId() + ",this,'" + column.name + "'," + column.lovWidth + "," + column.lovHeight + ",'" + column.prompt + "');}"; editorConfig = editorConfig + ",lovUrl:'" + lovUrl + "',triggerClass:'x-form-search-trigger',onTriggerClick:" + lovFunction + "}"; column.editor = "new Ext.form.TriggerField(" + editorConfig + ")"; } else if ("lovcombo".equals(column.editor)) { editorConfig = editorConfig + ",store:" + options; editorConfig = editorConfig + ",displayField:'" + displayField + "'"; editorConfig = editorConfig + ",valueField:'" + valueField + "'"; editorConfig = editorConfig + ", triggerAction:'all' "; editorConfig = editorConfig + ",selectOnFocus:true "; editorConfig = editorConfig + ",mode : '" + mode + "'"; editorConfig = editorConfig + "}"; column.editor = "new Ext.ux.form.LovCombo(" + editorConfig + ")"; // 在用户没有指定renderer时,使用默认的renderer if (DataUtil.isNull(column.renderer)) { column.renderer = "function(value){return DBFound.gridLovComboRenderer(value,'" + valueField + "','" + displayField + "'," + options + ");}"; } } else if ("datetimefield".equals(column.editor)) { if (DataUtil.isNotNull(precision)) { editorConfig = editorConfig + ", precision:'"+precision+"'"; } editorConfig = editorConfig + "}"; column.editor = "new Ext.ux.form.DateTimeField(" + editorConfig + ")"; // 在用户没有指定renderer时,使用默认的renderer if (DataUtil.isNull(column.renderer)) { column.renderer = "function(v,m,r){return $D.dateTimeFormat(v,'" + name + "',r)}"; } } else if ("password".equals(column.editor)) { editorConfig = editorConfig + ",inputType:'password'}"; column.editor = "new Ext.form.TextField(" + editorConfig + ")"; // 在用户没有指定renderer时,使用默认的renderer if (DataUtil.isNull(column.renderer)) { column.renderer = "$D.passwordHidden"; } } else { column.editor = null; } } columns.getColumns().add(column); return EVAL_PAGE; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPrompt() { return prompt; } public void setPrompt(String prompt) { this.prompt = MultiLangUtil.getValue(prompt, pageContext); } public String getRenderer() { return renderer; } public void setRenderer(String renderer) { this.renderer = renderer; } public String getEditor() { return editor; } public void setEditor(String editor) { this.editor = editor; } public String getDisplayField() { return displayField; } public void setDisplayField(String displayField) { this.displayField = displayField; } public String getOptions() { return options; } public void setOptions(String options) { this.options = options; } public String getValueField() { return valueField; } public void setValueField(String valueField) { this.valueField = valueField; } public String getMode() { return mode; } public void setMode(String mode) { this.mode = mode; } public String getAlign() { return align; } public void setAlign(String align) { this.align = align; } public boolean isUpper() { return upper; } public void setUpper(boolean upper) { this.upper = upper; } public String getLovUrl() { return lovUrl; } public void setLovUrl(String lovUrl) { this.lovUrl = lovUrl; } public String getWidth() { return width; } public void setWidth(String width) { this.width = width; } public boolean isRequired() { return required; } public void setRequired(boolean required) { this.required = required; } public boolean isLocked() { return locked; } public void setLocked(boolean locked) { this.locked = locked; } public String getLovWidth() { return lovWidth; } public void setLovWidth(String lovWidth) { this.lovWidth = lovWidth; } public String getLovHeight() { return lovHeight; } public void setLovHeight(String lovHeight) { this.lovHeight = lovHeight; } public boolean isAllowDecimals() { return allowDecimals; } public void setAllowDecimals(boolean allowDecimals) { this.allowDecimals = allowDecimals; } public boolean isAllowNegative() { return allowNegative; } public void setAllowNegative(boolean allowNegative) { this.allowNegative = allowNegative; } public boolean isSortable() { return sortable; } public void setSortable(boolean sortable) { this.sortable = sortable; } public boolean isEditable() { return editable; } public void setEditable(boolean editable) { this.editable = editable; } public boolean isHidden() { return hidden; } public void setHidden(boolean hidden) { this.hidden = hidden; } public String getVtype() { return vtype; } public void setVtype(String vtype) { this.vtype = vtype; } public String getPrecision() { return precision; } public void setPrecision(String precision) { this.precision = precision; } }