ext js 4 学习笔记6
    一 ext.direct
    有点象DWR,但跨平台,根据后台暴露的功能生成前台的JS
  1)支持类库下载:directjngine  http://code.google.com/p/directjngine
  2)配置服务端功能
     比如首先formaction处理表单的读取和提交
     @DirectMethod
	public ExtFormDirectResult loadProductServer(String productId){
		ExtFormDirectResult result = new ExtFormDirectResult();
		if("001".equals(productId)){
			//获取产品信息
			Product product = new Product();
			product.setProductName("笔记本");
			product.setIntroduction("本产品美观实用,售后服务优秀。");
			//将产品信息放入结果对象中
			result.setData(product);
			result.setSuccess(true);
		}else{
			//设置错误信息
			result.setErrorMessage("读取的产品id不存在");
			result.setSuccess(false);
		}
		return result;
	}
	/**
	 * 表单提交处理方法
	 * @param params 表单参数集合
	 * @param files 文件集合
	 * @return 结果对象
	 */
	@DirectFormPostMethod
	public ExtFormDirectResult submitProductServer(Map<String,String> params, Map<String, FileItem> files){
		ExtFormDirectResult result = new ExtFormDirectResult();
		//获取表单参数
		String productName = params.get("productName");
		if("笔记本".equals(productName)){
			result.setSuccess(true);
		}else{
			result.addError("productName", "产品名称必须是:笔记本");
			//设置错误信息
			result.setErrorMessage("提交产品名称错误");
			result.setSuccess(false);
		}
		return result;
	}   
   配置WEB.XML
     <!-- DirectJNgine servlet -->
	<servlet>
		<servlet-name>DjnServlet</servlet-name>
		<servlet-class>
			com.softwarementors.extjs.djn.servlet.DirectJNgineServlet</servlet-class>
		<init-param>
			<param-name>providersUrl</param-name>
			<param-value>djn/directprovider</param-value>
		</init-param>
		<init-param>
			<param-name>apis</param-name>
			<param-value>form,data</param-value>
		</init-param>
		<init-param>
			<param-name>form.apiFile</param-name>
			<param-value>form/api.js</param-value>
		</init-param>
		<init-param>
			<param-name>data.apiFile</param-name>
			<param-value>data/api.js</param-value>
		</init-param>
		<init-param>
			<param-name>form.apiNamespace</param-name>
			<param-value>Ext.form.app</param-value>
		</init-param>
		<init-param>
			<param-name>data.apiNamespace</param-name>
			<param-value>Ext.data.app</param-value>
		</init-param>
		<init-param>
			<param-name>form.classes</param-name>
			<param-value>
				com.sample.ext4.direct.form.action.FormAction
			</param-value>
		</init-param>
		<init-param>
			<param-name>data.classes</param-name>
			<param-value>
				com.sample.ext4.direct.data.action.DataAction
			</param-value>
		</init-param>
		<init-param>
			<param-name>debug</param-name>
			<param-value>false</param-value>
		</init-param>
		<init-param>
			<!-- 指定gson的配置类 -->
			<param-name>gsonBuilderConfiguratorClass</param-name>
			<param-value>com.sample.ext4.direct.config.GsonBuilderConfiguratorCustom</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet>
		<servlet-name>action</servlet-name>
		<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
	</servle