ofbiz-kendoUI-dropDownList

1、widget-form.xsd文件中加入以下内容:

<!-- kd-drop-down-list start by ligeng  -->
    <xs:element name="kd-drop-down-list" substitutionGroup="AllFields">
    	<xs:complexType>
    		<xs:attributeGroup ref="attlist.kd-drop-down-list"></xs:attributeGroup>
    	</xs:complexType>
    </xs:element>
    <xs:attributeGroup name="attlist.kd-drop-down-list">
    	<xs:attribute name="sidx" type="xs:string"></xs:attribute>
    	<xs:attribute name="type" use="required">
    		<xs:simpleType>
    			<xs:restriction base="xs:token">
    				<xs:enumeration value="tableDir"></xs:enumeration>
    				<xs:enumeration value="refList"></xs:enumeration>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:attribute>
    	<xs:attribute name="refenceValue" type="xs:string"></xs:attribute>
    	<xs:attribute name="entity" type="xs:string"></xs:attribute>
    	<xs:attribute name="nameField" type="xs:string"></xs:attribute>
    	<xs:attribute name="valueField" type="xs:string"></xs:attribute>
    	<xs:attribute name="sord" type="xs:string"></xs:attribute>
    	<xs:attribute name="delay" type="xs:integer"></xs:attribute>
    	<xs:attribute name="height" type="xs:integer"></xs:attribute>
    	<xs:attribute name="optionLabel" type="xs:string"></xs:attribute>
    	<xs:attribute name="value" type="xs:string"></xs:attribute>
    </xs:attributeGroup>
2、ModelFormField.java中添加以下内容:

/*Kd-Drop-Down-List  start*/
    public static class KdDropDownListField extends FieldInfo{
    	protected String sidx;
    	protected String type;
    	protected String refenceValue;
    	protected String entity;
    	protected String nameField;
    	protected String valueField;
    	protected String sord;
    	protected String delay;
		protected String height;
		protected String optionLabel;
		protected String value;
		
		
    	public String getType() {
			return type;
		}

		public void setType(String type) {
			this.type = type;
		}

		public String getRefenceValue() {
			return refenceValue;
		}

		public void setRefenceValue(String refenceValue) {
			this.refenceValue = refenceValue;
		}

		public String getSidx() {
			return sidx;
		}

		public void setSidx(String sidx) {
			this.sidx = sidx;
		}

		public String getEntity() {
			return entity;
		}

		public void setEntity(String entity) {
			this.entity = entity;
		}

		public String getNameField() {
			return nameField;
		}

		public void setNameField(String nameField) {
			this.nameField = nameField;
		}

		public String getValueField() {
			return valueField;
		}

		public void setValueField(String valueField) {
			this.valueField = valueField;
		}

		public String getSord() {
			return sord;
		}

		public void setSord(String sord) {
			this.sord = sord;
		}

		public String getDelay() {
			return delay;
		}

		public void setDelay(String delay) {
			this.delay = delay;
		}

		public String getHeight() {
			return height;
		}

		public void setHeight(String height) {
			this.height = height;
		}

		public String getOptionLabel() {
			return optionLabel;
		}

		public void setOptionLabel(String optionLabel) {
			this.optionLabel = optionLabel;
		}

		public String getValue() {
			return value;
		}

		public void setValue(String value) {
			this.value = value;
		}

		protected KdDropDownListField() {
            super();
        }

        public KdDropDownListField(ModelFormField modelFormField) {
            super(FieldInfo.SOURCE_EXPLICIT, FieldInfo.KD_DROP_DOWN_LIST, modelFormField);
        }

        public KdDropDownListField(int fieldSource, ModelFormField modelFormField) {
            super(fieldSource, FieldInfo.KD_DROP_DOWN_LIST, modelFormField);
        }
       
        public KdDropDownListField(Element element, ModelFormField modelFormField) {
        	super(element, modelFormField);
        	this.type = element.getAttribute("type");
        	this.refenceValue = element.getAttribute("refenceValue");
        	this.sidx = element.getAttribute("sidx");
        	this.entity = element.getAttribute("entity");
        	this.nameField = element.getAttribute("nameField");
        	this.valueField = element.getAttribute("valueField");
        	this.sord = element.getAttribute("sord");
        	this.delay = element.getAttribute("delay"); 
        	this.height = element.getAttribute("height");
        	this.optionLabel = element.getAttribute("optionLabel");
        	this.value = element.getAttribute("value");
        }
        @Override
		public void renderFieldString(Appendable writer, Map<String, Object> context,FormStringRenderer formStringRenderer) throws IOException {
			formStringRenderer.renderKdDropDownListField(writer, context, this);
		}
    }

3、ModelFormField.java类的抽象子类FieldInfo中添加静态常量:

public static final int KD_DROP_DOWN_LIST = 26;
并且在FieldInfo的静态属性fieldTypeByName中添加

fieldTypeByName.put("kd-drop-down-list", Integer.valueOf(26));
</pre><p><pre name="code" class="java">else if ("file".equals(subElementName)) this.fieldInfo = new FileField(subElement, this);
            else if ("password".equals(subElementName)) this.fieldInfo = new PasswordField(subElement, this);
            else if ("image".equals(subElementName)) this.fieldInfo = new ImageField(subElement, this);
            else if ("container".equals(subElementName)) this.fieldInfo = new ContainerField(subElement, this);
            else if ("on-field-event-update-area".equals(subElementName)) addOnEventUpdateArea(new UpdateArea(subElement));
            
            else if ("kd-date-picker".equals(subElementName)) {
				this.fieldInfo = new KdDatePickerField(subElement,this);
			}
            else if ("kd-datetime-picker".equals(subElementName)) {
				this.fieldInfo = new KdDateTimePickerField(subElement,this);
			}
            else if ("kd-time-picker".equals(subElementName)) {
				this.fieldInfo = new KdTimePickerField(subElement,this);
			}
            else if ("kd-auto-complete".equals(subElementName)) {
				this.fieldInfo = new KdAutoCompleteField(subElement,this);
			}
            else if ("kd-drop-down-list".equals(subElementName)) {
				this.fieldInfo = new KdDropDownListField(subElement,this);
			}



4、FormStringRenderer.java接口中添加抽象方法:

/** KdDropDownListField*/
    public void renderKdDropDownListField(Appendable writer, Map<String, Object> context, ModelFormField.KdDropDownListField kdDropDownListField) throws IOException;
    

5、MacroFormRenderer.java(实现FormStringRenderer接口)中添加以下内容

/**renderKdDropDownListField */
	public void renderKdDropDownListField(Appendable writer, Map<String, Object> context,KdDropDownListField kdDropDownListField)throws IOException {
		ModelFormField modelFormField = kdDropDownListField.getModelFormField();
		String id = modelFormField.getCurrentContainerId(context);
		String name = modelFormField.getName();
		
		String sidx = kdDropDownListField.getSidx();
		String entity = kdDropDownListField.getEntity();
		String type = kdDropDownListField.getType();
		String refenceValue = kdDropDownListField.getRefenceValue();
		String nameField = kdDropDownListField.getNameField();
		String valueField = kdDropDownListField.getValueField();
		String sord = kdDropDownListField.getSord();
		String delay = kdDropDownListField.getDelay();
		String height = kdDropDownListField.getHeight();
		String optionLabel = kdDropDownListField.getOptionLabel();
		String value = kdDropDownListField.getValue();
		
		StringWriter sr = new StringWriter();
		sr.append("<@kdDropDownList ");
		sr.append("id = \"");
		sr.append(id);
		sr.append("\" name = \"");
		sr.append(name);
		sr.append("\" entity = \"");
		sr.append(entity);
		sr.append("\" type =\"");
		sr.append(type);
		sr.append("\" refenceValue =\"");
		sr.append(refenceValue);
		sr.append("\" nameField=\"");
		sr.append(nameField);
		sr.append("\" valueField=\"");
		sr.append(valueField);
		sr.append("\" delay = \"");
		sr.append(delay);
		sr.append("\" height = \"");
		sr.append(height);
		sr.append("\" optionLabel = \"");
		sr.append(optionLabel);
		sr.append("\" value =\"");
		sr.append(value);
		sr.append("\" />");
		executeMacro(writer, sr.toString());
	}

6、htmlFormMacroLibrary.ftl文件中添加以下内容:

<!-- kdDropDownList start by ligeng -->
<#macro kdDropDownList id name entity type refenceValue nameField valueField delay height optionLabel value>
	<input id="${id}" name="${name}" />
	<script>
		var data_${id};
		<#if "${type}"=="tableDir">
			data_${id} = findTableDirOptions('${entity}','${nameField}','${valueField}');
		<#else>
			data_${id} = findrefListOptions('${refenceValue}');
		</#if>
		
		$("#${id}").kendoDropDownList({
			dataTextField: "text",
  			dataValueField: "value",
			dataSource: data_${id},
			<#if delay?has_content>delay:"${delay}",</#if>
		  	<#if height?has_content>height:"${height}",</#if>
		  	<#if optionLabel?has_content>
		  		optionLabel:{
		  			text:"${optionLabel}",
		  			value:" "
		  		}
		  	</#if>
		  	<#if value?has_content>value:"${value}",</#if>
			
		});
	</script>
</#macro>
<!-- kdDropDownList end by ligeng -->

7、添加数据源

7-1、在tool.js文件中添加两个函数

function findTableDirOptions(entityName,nameField,valueField){   
	var data;
	$.ajax({url:'findTableDirOptions?entityName='+entityName+'&nameField='+nameField+'&valueField='+valueField,async:false, success:function(e){           
	    if (e != null) { 
	      data = e;                                                            
	          }
	    }});
	return $.parseJSON(data); 
};
function findRefListEvent(referenceValue){   
	var data;
	$.ajax({url:'findRefListEvent?referenceValue='+referenceValue,async:false, success:function(e){           
	    if (e != null) { 
	      data = e;                                                            
	          }
	    }});
	return $.parseJSON(data); 
};


7-2、在common-controller.xml文件中添加一个request

<request-map uri="findTableDirOptions">
		<security https="true" auth="true"/>
		<event type="java"  path="org.ofbiz.common.CommonEvents"  invoke="findTableDirEvent"/>
		<response name="success" type="none" />
	</request-map>

7-3、在CommonEvents文件中添加以下内容:

public static String findTableDirEvent(HttpServletRequest request, HttpServletResponse response){
		LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
		Map<String, Object> result = FastMap.newInstance();
		Map<String, Object> context = FastMap.newInstance();
		try {
			GenericValue userLogin = (GenericValue) context.get("userLogin");
			
			context.put("userLogin", userLogin);
			
			context.put("inputFields", request.getParameter("inputFields"));
			context.put("entityName", request.getParameter("entityName"));
			context.put("sidx", request.getParameter("sidx"));
			context.put("sord", request.getParameter("sord"));
			context.put("nameField", request.getParameter("nameField"));
			context.put("valueField", request.getParameter("valueField"));
			try {
				result = dispatcher.runSync("performFindTableDirOptions",context);
			} catch (GenericServiceException e) {
				e.printStackTrace();
			}
			String editoptions = (String)result.get("editoptions");
			//System.out.println(editoptions);
			response.getWriter().write(editoptions);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return ModelService.RESPOND_SUCCESS;
    }
  
    public static String findRefListEvent(HttpServletRequest request, HttpServletResponse response){
 		LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
 		Delegator delegator = (Delegator) request.getAttribute("delegator");
 		Map<String, Object> result = FastMap.newInstance();
 		try { 			
 			String referenceValue = request.getParameter("referenceValue");
 			StringBuffer editoptions = new StringBuffer();
 			
 			try {
 				 DynamicViewEntity dynamicView = new DynamicViewEntity();
 				dynamicView.addMemberEntity("RF", "MdReference");
 	            dynamicView.addAlias("RF", "mdRefrenceId");
 	           dynamicView.addAlias("RF", "referenceValue");
 	            EntityCondition entityCondition = EntityCondition.makeCondition(EntityFunction.UPPER_FIELD("referenceValue"), EntityOperator.EQUALS, referenceValue) ;
 	            
 				dynamicView.addMemberEntity("REL", "MdReflist");
 	            dynamicView.addAlias("REL", "reflistValue");
 	            dynamicView.addAlias("REL", "reflistName");
 				List<String> fieldsToSelect = FastList.newInstance();
 				fieldsToSelect.add("reflistValue");
 				fieldsToSelect.add("reflistName");
 	           dynamicView.addViewLink("RF", "REL", Boolean.FALSE, ModelKeyMap.makeKeyMapList("mdReferenceId", "mdReferenceId"));
 				
 	           
 	          EntityFindOptions findOpts = new EntityFindOptions(true, EntityFindOptions.TYPE_SCROLL_INSENSITIVE, EntityFindOptions.CONCUR_READ_ONLY, -1, 1000, true);
 	          List<String> orderBy = FastList.newInstance();
 	          TransactionUtil .begin();  
 	          EntityListIterator pli = delegator.findListIteratorByCondition(dynamicView, entityCondition, null, fieldsToSelect, orderBy, findOpts);
 	         TransactionUtil .commit(); 
		    	
 	          editoptions.append("[");
 	          int i =0;
 	          GenericValue entity;
 	          while(( entity = pli.next()) != null ){
 	        	  if(i==0){
 	        		 editoptions.append("{\"value\":\"");
 	        		editoptions.append("");
 	 	        	  editoptions.append("\"");
 	 	        	  editoptions.append(",");
 	 	        	  editoptions.append("\"text\":\"");
 	 	        	  editoptions.append(" ");
 	 	        	  editoptions.append("\"}"); 
	 	        	 editoptions.append(",");
 	        	  }else{
 	        		  editoptions.append(",");
 	        	  }
 	        	  editoptions.append("{\"value\":\"");
 	        	  editoptions.append(entity.get("reflistValue"));
 	        	  editoptions.append("\"");
 	        	  editoptions.append(",");
 	        	  editoptions.append("\"text\":\"");
 	        	  editoptions.append(entity.get("reflistName"));
 	        	  editoptions.append("\"}");
 	        	  i++;
	    		}
	    		editoptions.append("]");
	    		response.getWriter().write(editoptions.toString());
			} catch (GenericEntityException e) {
				
				Debug.logError(e, "Cannot mdRefrence Object", module);
				e.printStackTrace();
				try {  
		            TransactionUtil .rollback();  
		        } catch (GenericTransactionException e1) {  
		            e1.printStackTrace();  
		        }  
			}
 			
 			
 			
// 			try {
// 				result = dispatcher.runSync("performFindTableDirOptions",context);
// 			} catch (GenericServiceException e) {
// 				e.printStackTrace();
// 			}
// 			String editoptions = (String)result.get("editoptions");
 			
 		} catch (IOException e) {
 			e.printStackTrace();
 		}
 		 
 		 return ModelService.RESPOND_SUCCESS;
     }

7-4、(附:数据表)

<entity entity-name="MdReference" package-name="org.ofbiz.demo.projectmgr">
		<field name="mdReferenceId" type="id"></field>
		<field name="referenceName" type="id"></field>
		<field name="referenceValue" type="id"></field>
		<field name="description" type="id-vlong"></field>
		<prim-key field="mdReferenceId"/>
	</entity>

	<entity entity-name="MdReflist" package-name="org.ofbiz.md.projectmgr">
		<field name="mdReflistId" type="id"></field>
		<field name="mdReferenceId" type="id"></field>
		<field name="reflistValue" type="id-vlong"></field>
		<field name="reflistName" type="id"></field>
		<prim-key field="mdReflistId"/>
		<relation rel-entity-name="MdReference" type="one" title="FK_Reference_1">
			<key-map field-name="mdReferenceId" rel-field-name="mdReferenceId"/>
		</relation>
	</entity>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值