1、 添加xsd约束,在widget-screen.xsd文件加入以下内容
<!-- kd-grid start by ligeng-->
<xs:element name="kd-grid" substitutionGroup="AllWidgets">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="1" ref="kd-grid-datasource"></xs:element>
<xs:element maxOccurs="1" minOccurs="1" ref="kd-grid-columns"></xs:element>
<xs:element maxOccurs="1" minOccurs="0" ref="kd-grid-toolbar"></xs:element>
</xs:sequence>
<xs:attributeGroup ref="attlist.kd-grid"></xs:attributeGroup>
</xs:complexType>
</xs:element>
<xs:attributeGroup name="attlist.kd-grid">
<xs:attribute name="id" type="xs:string"></xs:attribute>
<xs:attribute name="selectable" default="multiple, row">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="true"></xs:enumeration>
<xs:enumeration value="false"></xs:enumeration>
<xs:enumeration value="multiple, row"></xs:enumeration>
<xs:enumeration value="cell"></xs:enumeration>
<xs:enumeration value="row"></xs:enumeration>
<xs:enumeration value="multiple, cell"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="editable" default="inline">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="inline"/>
<xs:enumeration value="popup"/>
<xs:enumeration value="incell"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="height" type="xs:integer"/>
<xs:attribute name="sortableMode" default="single">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="single"/>
<xs:enumeration value="multiple"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="filterable" type="xs:boolean"></xs:attribute>
<xs:attribute name="groupable" type="xs:boolean"></xs:attribute>
<xs:attribute name="resizable" type="xs:boolean"></xs:attribute>
<xs:attribute name="pageSizesInput" type="xs:boolean"></xs:attribute>
<xs:attribute name="refresh" type="xs:boolean"></xs:attribute>
<xs:attribute name="pageSizes" type="xs:boolean"></xs:attribute>
</xs:attributeGroup>
<!-- kd-grid-datasource start by ligeng-->
<xs:element name="kd-grid-datasource">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="1" ref="kd-grid-field"></xs:element>
</xs:sequence>
<xs:attributeGroup ref="attlist.kd-grid-datasource"></xs:attributeGroup>
</xs:complexType>
</xs:element>
<xs:attributeGroup name="attlist.kd-grid-datasource">
<xs:attribute name="entityName" type="xs:string" use="required"/>
<xs:attribute name="modelId" use="required"/>
<xs:attribute name="pageSize" use="optional"/>
<xs:attribute name="read" type="xs:string" />
<xs:attribute name="create" type="xs:string"/>
<xs:attribute name="update" type="xs:string"/>
<xs:attribute name="destroy" type="xs:string"/>
</xs:attributeGroup>
<!-- kd-grid-columns start by ligeng-->
<xs:element name="kd-grid-columns">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="1" ref="kd-grid-column"></xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="kd-grid-command"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- kd-grid-toolbar start by ligeng-->
<xs:element name="kd-grid-toolbar">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="kd-grid-toolbar-sub"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- kd-grid-toolbar-sub start by ligeng-->
<xs:element name="kd-grid-toolbar-sub">
<xs:complexType>
<xs:attributeGroup ref="attlist.kd-grid-toolbar-sub"></xs:attributeGroup>
</xs:complexType>
</xs:element>
<xs:attributeGroup name="attlist.kd-grid-toolbar-sub">
<xs:attribute name="name" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="create"></xs:enumeration>
<xs:enumeration value="save"></xs:enumeration>
<xs:enumeration value="cancel"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="text" type="xs:string"></xs:attribute>
</xs:attributeGroup>
<!-- kd-grid-column start by ligeng-->
<xs:element name="kd-grid-column">
<xs:complexType>
<xs:attributeGroup ref="attlist.kd-grid-column"></xs:attributeGroup>
</xs:complexType>
</xs:element>
<xs:attributeGroup name="attlist.kd-grid-column">
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="filterable" type="xs:boolean" />
<xs:attribute name="width" type="xs:integer" />
<xs:attribute name="values" type="xs:string"></xs:attribute>
<xs:attribute name="format" type="xs:string"></xs:attribute>
</xs:attributeGroup>
<!-- kd-grid-command start by ligeng-->
<xs:element name="kd-grid-command">
<xs:complexType>
<xs:attributeGroup ref="attlist.kd-grid-command"></xs:attributeGroup>
</xs:complexType>
</xs:element>
<xs:attributeGroup name="attlist.kd-grid-command">
<xs:attribute name="name" type="xs:string"></xs:attribute>
<xs:attribute name="text" type="xs:string"></xs:attribute>
<xs:attribute name="title" type="xs:string"></xs:attribute>
<xs:attribute name="width" type="xs:integer"></xs:attribute>
<xs:attribute name="click" type="xs:string"></xs:attribute>
</xs:attributeGroup>
<!-- kd-grid-field end by ligeng-->
<xs:element name="kd-grid-field">
<xs:complexType>
<xs:attributeGroup ref="attlist.kd-grid-field"></xs:attributeGroup>
</xs:complexType>
</xs:element>
<xs:attributeGroup name="attlist.kd-grid-field">
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="type" type="xs:string" />
<xs:attribute name="editable" type="xs:boolean" />
</xs:attributeGroup>
2、在ModelScreenWidget.Java文件中添加以下内容
/** Kd-Grid*/
public static class KdGrid extends ModelScreenWidget{
public static final String TAG_NAME = "kd-grid";
protected FlexibleStringExpander idExdr;
protected FlexibleStringExpander heightExdr;
protected FlexibleStringExpander selectableExdr;
protected FlexibleStringExpander editableExdr;
protected FlexibleStringExpander sortableModeExdr;
protected FlexibleStringExpander filterableExdr;
protected FlexibleStringExpander groupableExdr;
protected FlexibleStringExpander resizableExdr;
protected FlexibleStringExpander pageSizesInputExdr;
protected FlexibleStringExpander refreshExdr;
protected FlexibleStringExpander pageSizesExdr;
protected List<ModelScreenWidget> subWidgets;
public KdGrid(ModelScreen modelScreen,Element kdGridElement){
super(modelScreen, kdGridElement);
this.idExdr = FlexibleStringExpander.getInstance(kdGridElement.getAttribute("id"));
this.heightExdr = FlexibleStringExpander.getInstance(kdGridElement.getAttribute("height"));
this.selectableExdr = FlexibleStringExpander.getInstance(kdGridElement.getAttribute("selectable"));
this.editableExdr = FlexibleStringExpander.getInstance(kdGridElement.getAttribute("editable"));
this.sortableModeExdr = FlexibleStringExpander.getInstance(kdGridElement.getAttribute("sortableMode"));
this.filterableExdr = FlexibleStringExpander.getInstance(kdGridElement.getAttribute("filterable"));
this.groupableExdr = FlexibleStringExpander.getInstance(kdGridElement.getAttribute("groupable"));
this.resizableExdr = FlexibleStringExpander.getInstance(kdGridElement.getAttribute("resizable"));
this.pageSizesExdr = FlexibleStringExpander.getInstance(kdGridElement.getAttribute("pageSizes"));
this.pageSizesInputExdr = FlexibleStringExpander.getInstance(kdGridElement.getAttribute("pageSizesInput"));
this.refreshExdr = FlexibleStringExpander.getInstance(kdGridElement.getAttribute("refresh"));
List<? extends Element> subElementList = UtilXml.childElementList(kdGridElement);
this.subWidgets = ModelScreenWidget.readSubWidgets(this.modelScreen, subElementList);
}
@Override
public String rawString() {
return "<kd-grid id= \"" + this.idExdr.getOriginal()+"\" height=\"" +this.heightExdr.getOriginal()+"\" selectable=\""+this.selectableExdr.getOriginal()+
"\" editable=\"" + this.editableExdr.getOriginal()+"\" sortableMode=\""+this.sortableModeExdr.getOriginal()+"\" filterable=\""+this.filterableExdr.getOriginal()+
"\" pageSizes=\""+ this.pageSizesExdr.getOriginal()+"\" pageSizesInput =\""+this.pageSizesInputExdr.getOriginal()+"\" refresh=\""+this.refreshExdr.getOriginal()
+"> ";
}
@Override
public void renderWidgetString(Appendable writer, Map<String, Object> context, ScreenStringRenderer screenStringRenderer) throws GeneralException, IOException {
try {
screenStringRenderer.renderKdGridBegin(writer, context, this);
// render sub-widgets
renderSubWidgetsString(this.subWidgets, writer, context, screenStringRenderer);
screenStringRenderer.renderKdGridEnd(writer, context, this);
} catch (Exception e) {
String errMsg = "Error rendering kdGrid in screen named [" + this.modelScreen.getName() + "]: " + e.toString();
Debug.logError(e, errMsg, module);
throw new RuntimeException(errMsg);
}
}
public String getId(Map<String, Object> context) {
return this.idExdr.expandString(context);
}
public String getHeight(Map<String, Object> context){
return this.heightExdr.expandString(context);
}
public String getSelectable(Map<String, Object> context){
return this.selectableExdr.expandString(context);
}
public String getEditable(Map<String, Object> context){
return this.editableExdr.expandString(context);
}
public String getSortableMode(Map<String, Object> context){
return this.sortableModeExdr.expandString(context);
}
public String getFilterable(Map<String, Object> context){
return this.filterableExdr.expandString(context);
}
public String getGroupable(Map<String, Object> context){
return this.groupableExdr.expandString(context);
}
public String getResizable(Map<String, Object> context){
return this.resizableExdr.expandString(context);
}
public String getPageSizes(Map<String, Object> context){
return this.pageSizesExdr.expandString(context);
}
public String getPageSizesInput(Map<String, Object> context){
return this.pageSizesInputExdr.expandString(context);
}
public String getRefresh(Map<String, Object> context){
return this.refreshExdr.expandString(context);
}
}
/* kd-grid-datasource*/
public static class KdGridDataSource extends ModelScreenWidget{
public static final String TAG_NAME = "kd-grid-datasource";
protected FlexibleStringExpander entityNameExdr;
protected FlexibleStringExpander pageSizeExdr;
protected FlexibleStringExpander modelIdExdr;
protected FlexibleStringExpander readExdr;
protected FlexibleStringExpander updateExdr;
protected FlexibleStringExpander createExdr;
protected FlexibleStringExpander destroyExdr;
protected List<ModelScreenWidget> subWidgets;
public KdGridDataSource(ModelScreen modelScreen,Element kdGridDataSourceElement){
super(modelScreen, kdGridDataSourceElement);
this.entityNameExdr = FlexibleStringExpander.getInstance(kdGridDataSourceElement.getAttribute("entityName"));
this.pageSizeExdr = FlexibleStringExpander.getInstance(kdGridDataSourceElement.getAttribute("pageSize"));
this.modelIdExdr = FlexibleStringExpander.getInstance(kdGridDataSourceElement.getAttribute("modelId"));
this.readExdr = FlexibleStringExpander.getInstance(kdGridDataSourceElement.getAttribute("read"));
this.updateExdr = FlexibleStringExpander.getInstance(kdGridDataSourceElement.getAttribute("update"));
this.destroyExdr = FlexibleStringExpander.getInstance(kdGridDataSourceElement.getAttribute("destroy"));
this.createExdr = FlexibleStringExpander.getInstance(kdGridDataSourceElement.getAttribute("create"));
List<? extends Element> subElementList = UtilXml.childElementList(kdGridDataSourceElement);
this.subWidgets = ModelScreenWidget.readSubWidgets(this.modelScreen, subElementList);
}
@Override
public void renderWidgetString(Appendable writer,Map<String, Object> context,ScreenStringRenderer screenStringRenderer)throws GeneralException, IOException {
try {
screenStringRenderer.renderKdGridDataSourceBegin(writer, context, this);
// render sub-widgets
renderSubWidgetsString(this.subWidgets, writer, context, screenStringRenderer);
screenStringRenderer.renderKdGridDataSourceEnd(writer, context, this);
} catch (Exception e) {
String errMsg = "Error rendering kdGridDataSource in screen named [" + this.modelScreen.getName() + "]: " + e.toString();
Debug.logError(e, errMsg, module);
throw new RuntimeException(errMsg);
}
}
@Override
public String rawString() {
return "<kd-grid-datasource entityName=\""+this.entityNameExdr.getOriginal()+
"\" pageSize=\"" +this.pageSizeExdr.getOriginal()+
"\" modelId=\""+this.modelIdExdr.getOriginal()+"\""+">";
}
public String getEntityName(Map<String, Object> context){
return this.entityNameExdr.expandString(context);
}
public String getPageSize(Map<String, Object> context){
return this.pageSizeExdr.expandString(context);
}
public String getModelId(Map<String, Object> context){
return this.modelIdExdr.expandString(context);
}
public String getRead(Map<String, Object> context){
return this.readExdr.expandString(context);
}
public String getUpdate(Map<String, Object> context){
return this.updateExdr.expandString(context);
}
public String getDestroy(Map<String, Object> context){
return this.destroyExdr.expandString(context);
}
public String getCreate(Map<String, Object> context){
return this.createExdr.expandString(context);
}
}
/* kd-grid-columns*/
public static class KdGridColumns extends ModelScreenWidget{
public static final String TAG_NAME = "kd-grid-columns";
protected List<ModelScreenWidget> subWidgets;
public KdGridColumns(ModelScreen modelScreen, Element kdGridColumnsElement) {
super(modelScreen, kdGridColumnsElement);
List<? extends Element> subElementList = UtilXml.childElementList(kdGridColumnsElement);
this.subWidgets = ModelScreenWidget.readSubWidgets(this.modelScreen, subElementList);
}
@Override
public void renderWidgetString(Appendable writer,Map<String, Object> context,ScreenStringRenderer screenStringRenderer)throws GeneralException, IOException {
try {
screenStringRenderer.renderKdGridColumnsBegin(writer, context, this);
// render sub-widgets
renderSubWidgetsString(this.subWidgets, writer, context, screenStringRenderer);
screenStringRenderer.renderKdGridColumnsEnd(writer, context, this);
} catch (Exception e) {
String errMsg = "Error rendering kdGridColumns in screen named [" + this.modelScreen.getName() + "]: " + e.toString();
Debug.logError(e, errMsg, module);
throw new RuntimeException(errMsg);
}
}
@Override
public String rawString() {
return "<kd-grid-columns>";
}
}
/* kd-grid-toolbar */
public static class KdGridToolbar extends ModelScreenWidget{
public static final String TAG_NAME = "kd-grid-toolbar";
protected List<ModelScreenWidget> subWidgets;
public KdGridToolbar(ModelScreen modelScreen, Element kdGridToolbarElement) {
super(modelScreen, kdGridToolbarElement);
List<? extends Element> subElementList = UtilXml.childElementList(kdGridToolbarElement);
this.subWidgets = ModelScreenWidget.readSubWidgets(this.modelScreen, subElementList);
}
@Override
public void renderWidgetString(Appendable writer,Map<String, Object> context,ScreenStringRenderer screenStringRenderer)throws GeneralException, IOException {
try {
screenStringRenderer.renderKdGridToolbarBegin(writer, context, this);
// render sub-widgets
renderSubWidgetsString(this.subWidgets, writer, context, screenStringRenderer);
screenStringRenderer.renderKdGridToolbarEnd(writer, context, this);
} catch (Exception e) {
String errMsg = "Error rendering kdGridToolbar in screen named [" + this.modelScreen.getName() + "]: " + e.toString();
Debug.logError(e, errMsg, module);
throw new RuntimeException(errMsg);
}
}
@Override
public String rawString() {
return "<kd-grid-toolbar>";
}
}
/* kd-grid-toolbar-sub */
public static class KdGridToolbarSub extends ModelScreenWidget{
public static final String TAG_NAME = "kd-grid-toolbar-sub";
protected FlexibleStringExpander nameExdr;
protected FlexibleStringExpander textExdr;
public KdGridToolbarSub(ModelScreen modelScreen, Element kdGridToolbarSubElement) {
super(modelScreen, kdGridToolbarSubElement);
this.nameExdr = FlexibleStringExpander.getInstance(kdGridToolbarSubElement.getAttribute("name"));
this.textExdr = FlexibleStringExpander.getInstance(kdGridToolbarSubElement.getAttribute("text"));
}
@Override
public void renderWidgetString(Appendable writer,Map<String, Object> context,ScreenStringRenderer screenStringRenderer)throws GeneralException, IOException {
screenStringRenderer.renderKdGridToolbarSub(writer, context, this);
}
@Override
public String rawString() {
return "<kd-grid-toolbar-sub name = \""+this.nameExdr.getOriginal()+"\" text = \""+this.textExdr.getOriginal() +" />";
}
public String getName(Map<String, Object> context){
return this.nameExdr.expandString(context);
}
public String getText(Map<String, Object> context){
return this.textExdr.expandString(context);
}
}
/* kd-grid-Column*/
public static class KdGridColumn extends ModelScreenWidget{
public static final String TAG_NAME = "kd-grid-column";
protected FlexibleStringExpander nameExdr;
protected FlexibleStringExpander filterableExdr;
protected FlexibleStringExpander widthExdr;
protected FlexibleStringExpander valuesExdr;
protected FlexibleStringExpander formatExdr;
public KdGridColumn(ModelScreen modelScreen,Element kdGridColumnElement){
super(modelScreen,kdGridColumnElement);
this.nameExdr = FlexibleStringExpander.getInstance(kdGridColumnElement.getAttribute("name"));
this.filterableExdr = FlexibleStringExpander.getInstance(kdGridColumnElement.getAttribute("filterable"));
this.widthExdr = FlexibleStringExpander.getInstance(kdGridColumnElement.getAttribute("width"));
this.valuesExdr = FlexibleStringExpander.getInstance(kdGridColumnElement.getAttribute("values"));
this.formatExdr = FlexibleStringExpander.getInstance(kdGridColumnElement.getAttribute("format"));
}
@Override
public String rawString() {
// may want to add more to this
return "<kd-grid-column name=\"" + this.nameExdr.getOriginal() + "\" filterable=\"" + this.filterableExdr.getOriginal() + "\" width=\"" + this.widthExdr.getOriginal()+"\"/>";
}
@Override
public void renderWidgetString(Appendable writer,Map<String, Object> context,ScreenStringRenderer screenStringRenderer)
throws GeneralException, IOException {
screenStringRenderer.renderKdGridColumn(writer, context, this);
}
public String getName(Map<String, Object> context){
return this.nameExdr.expandString(context);
}
public String getFilterable(Map<String, Object> context){
return this.filterableExdr.expandString(context);
}
public String getWidth(Map<String, Object> context){
return this.widthExdr.expandString(context);
}
public String getValues(Map<String, Object> context){
return this.valuesExdr.expandString(context);
}
public String getFormat(Map<String, Object> context){
return this.formatExdr.expandString(context);
}
}
/* Kd-Grid-command */
public static class KdGridCommand extends ModelScreenWidget{
public static final String TAG_NAME = "kd-grid-command";
protected FlexibleStringExpander nameExdr;
protected FlexibleStringExpander textExdr;
protected FlexibleStringExpander titleExdr;
protected FlexibleStringExpander widthExdr;
protected FlexibleStringExpander clickExdr;
public KdGridCommand(ModelScreen modelScreen, Element kdGridCommandElement) {
super(modelScreen, kdGridCommandElement);
this.nameExdr = FlexibleStringExpander.getInstance(kdGridCommandElement.getAttribute("name"));
this.textExdr = FlexibleStringExpander.getInstance(kdGridCommandElement.getAttribute("text"));
this.titleExdr = FlexibleStringExpander.getInstance(kdGridCommandElement.getAttribute("title"));
this.widthExdr = FlexibleStringExpander.getInstance(kdGridCommandElement.getAttribute("width"));
this.clickExdr = FlexibleStringExpander.getInstance(kdGridCommandElement.getAttribute("click"));
}
@Override
public void renderWidgetString(Appendable writer,Map<String, Object> context,ScreenStringRenderer screenStringRenderer)throws GeneralException, IOException {
screenStringRenderer.renderKdGridCommand(writer, context, this);
}
@Override
public String rawString() {
return "<kd-grid-command title = \""+this.titleExdr.getOriginal()+"\" width=\""+this.widthExdr.getOriginal()+
"\" name =\"" +this.nameExdr.getOriginal()+ "\" text=\""+this.textExdr.getOriginal()+
"\" click =\""+this.clickExdr.getOriginal() +"\" >";
}
public String getTitle(Map<String, Object> context){
return this.titleExdr.expandString(context);
}
public String getWidth(Map<String, Object> context){
return this.widthExdr.expandString(context);
}
public String getName(Map<String, Object> context){
return this.nameExdr.expandString(context);
}
public String getText(Map<String, Object> context){
return this.textExdr.expandString(context);
}
public String getClick(Map<String, Object> context){
return this.clickExdr.expandString(context);
}
}
/* Kd-Grid-Field*/
public static class KdGridField extends ModelScreenWidget{
public static final String TAG_NAME = "kd-grid-field";
protected FlexibleStringExpander nameExdr;
protected FlexibleStringExpander typeExdr;
protected FlexibleStringExpander editableExdr;
public KdGridField(ModelScreen modelScreen,Element kdGridFieldElement){
super(modelScreen, kdGridFieldElement);
this.nameExdr = FlexibleStringExpander.getInstance(kdGridFieldElement.getAttribute("name"));
this.typeExdr = FlexibleStringExpander.getInstance(kdGridFieldElement.getAttribute("type"));
this.editableExdr = FlexibleStringExpander.getInstance(kdGridFieldElement.getAttribute("editable"));
}
@Override
public void renderWidgetString(Appendable writer,Map<String, Object> context,ScreenStringRenderer screenStringRenderer)
throws GeneralException, IOException {
screenStringRenderer.renderKdGridField(writer, context, this);
}
@Override
public String rawString() {
return "<kd-grid-field nama=\""+this.nameExdr.getOriginal()+"\" type =\""+this.typeExdr.getOriginal()+"\" editable=\""+this.editableExdr.getOriginal()+"\"/>" ;
}
public String getName(Map<String, Object> context){
return this.nameExdr.expandString(context);
}
public String getType(Map<String, Object> context){
return this.typeExdr.expandString(context);
}
public String getEditable(Map<String, Object> context){
return this.editableExdr.expandString(context);
}
}