这里讲解四个例子
1,使用flex的远程调用方式(java的BlazeDS方式)一个查询table的
2,使用flex和spring的结合,采用远程对象做一个table的查询
3,使用flex和spring的结合,做一个分页查询的远程对象调用
4,使用flex和spring的结合,做一个分页查询的远程对象调用,对表头的方式
首先配置web.xml文件,一边web工程能够启动spring容器和flex的servlet
增加一个flex service中使用的对象能够使用spring容器中创建的对象
在flex配置文件services-config.xml中增加
这个类的源代码如下
spring容器的配置文件
这里再配置flex远程对象调用的配置文件
remoting-config.xml
第一个配置就是flex使用自己的配置实例化类
第二就是和spring结合,使用spring容器里创建的实例类对象
flex方式实例化的类
spring实例化的类
组装对象
分页对象
第一个flex调用的table的mxml代码
1,使用flex的远程调用方式(java的BlazeDS方式)一个查询table的
2,使用flex和spring的结合,采用远程对象做一个table的查询
3,使用flex和spring的结合,做一个分页查询的远程对象调用
4,使用flex和spring的结合,做一个分页查询的远程对象调用,对表头的方式
首先配置web.xml文件,一边web工程能够启动spring容器和flex的servlet
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Http Flex Session attribute and binding listener support -->
<listener>
<listener-class>flex.messaging.HttpFlexSession</listener-class>
</listener>
<!-- MessageBroker Servlet -->
<servlet>
<servlet-name>MessageBrokerServlet</servlet-name>
<servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
<init-param>
<param-name>services.configuration.file</param-name>
<param-value>/WEB-INF/flex/services-config.xml</param-value>
</init-param>
<init-param>
<param-name>flex.write.path</param-name>
<param-value>/WEB-INF/flex</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MessageBrokerServlet</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
增加一个flex service中使用的对象能够使用spring容器中创建的对象
在flex配置文件services-config.xml中增加
<factories>
<factory id="spring" class="com.fruitking.report.flex.util.FlexSpringFactory" />
</factories>
这个类的源代码如下
package com.fruitking.report.flex.util;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import flex.messaging.FactoryInstance;
import flex.messaging.FlexFactory;
import flex.messaging.config.ConfigMap;
import flex.messaging.services.ServiceException;
public class FlexSpringFactory implements FlexFactory {
private static final String SOURCE = "source";
public void initialize(String id, ConfigMap configMap) {
}
public FactoryInstance createFactoryInstance(String id, ConfigMap properties) {
SpringFactoryInstance instance = new SpringFactoryInstance(this,id,properties);
instance.setSource(properties.getPropertyAsString(SOURCE, instance.getId()));
return instance;
} // end method createFactoryInstance()
public Object lookup(FactoryInstance inst) {
SpringFactoryInstance factoryInstance = (SpringFactoryInstance) inst;
return factoryInstance.lookup();
}
static class SpringFactoryInstance extends FactoryInstance {
SpringFactoryInstance(FlexSpringFactory factory, String id,ConfigMap properties) {
super(factory, id, properties);
}
public String toString() {
return "SpringFactory instance for id=" + getId() + " source="
+ getSource() + " scope=" + getScope();
}
public Object lookup(){
ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(flex.messaging.FlexContext.getServletConfig().getServletContext());
String beanName = getSource();
try{
return appContext.getBean(beanName);
}
catch (NoSuchBeanDefinitionException nexc){
ServiceException e = new ServiceException();
String msg = "Spring service named '" + beanName + "' does not exist.";
e.setMessage(msg);
e.setRootCause(nexc);
e.setDetails(msg);
e.setCode("Server.Processing");
throw e;
}
catch (BeansException bexc){
ServiceException e = new ServiceException();
String msg = "Unable to create Spring service named '" + beanName + "' ";
e.setMessage(msg);
e.setRootCause(bexc);
e.setDetails(msg);
e.setCode("Server.Processing");
throw e;
}
}
}
}
spring容器的配置文件
<bean id="springIOCProductService" class="com.fruitking.report.service.impl.SpringProductServiceImpl">
</bean>
这里再配置flex远程对象调用的配置文件
remoting-config.xml
第一个配置就是flex使用自己的配置实例化类
第二就是和spring结合,使用spring容器里创建的实例类对象
<destination id="flexProductService">
<properties>
<source>com.fruitking.report.service.impl.FlexProductServiceImpl</source>
</properties>
</destination>
<destination id="springProductService">
<properties>
<factory>spring</factory>
<source>springIOCProductService</source>
<scope>session</scope>
</properties>
</destination>
flex方式实例化的类
public class FlexProductServiceImpl {
public List<Product> getProductList(){
List<Product> productList = new ArrayList<Product>();
try{
Product product = null;
for(int i=0;i<10;i++){
product = new Product();
product.setProductId(""+i);
product.setProductName(ContentUtil.getProductName(i));
product.setProductArea(ContentUtil.getProductArea(i));
product.setTotalSaleNumber(ContentUtil.getProductTotalSale(i));
product.setTotalBackNumber(ContentUtil.getProductTotalBack(i));
BigDecimal totalBackNumber = BigDecimal.valueOf(product.getTotalBackNumber());
BigDecimal totalSaleNumber = BigDecimal.valueOf(product.getTotalSaleNumber());
BigDecimal percent = totalBackNumber.divide(totalSaleNumber,4,BigDecimal.ROUND_HALF_EVEN);
percent = percent.divide(BigDecimal.valueOf(0.01d),2,BigDecimal.ROUND_HALF_EVEN);
product.setTotalBackPercent(percent.toString()+"%");
productList.add(product);
}
}catch(Exception e){
e.printStackTrace();
}
return productList;
}
}
spring实例化的类
public class SpringProductServiceImpl {
private int pageSize = 10;
private int pageTotal = 56;
public List<Product> getProductList(){
List<Product> productList = new ArrayList<Product>();
Product product = null;
for(int i=0;i<10;i++){
product = new Product();
product.setProductId(""+i);
product.setProductName(ContentUtil.getProductName(i));
product.setProductArea(ContentUtil.getProductArea(i));
product.setTotalSaleNumber(ContentUtil.getProductTotalSale(i));
product.setTotalBackNumber(ContentUtil.getProductTotalBack(i));
BigDecimal totalBackNumber = BigDecimal.valueOf(product.getTotalBackNumber());
BigDecimal totalSaleNumber = BigDecimal.valueOf(product.getTotalSaleNumber());
BigDecimal percent = totalBackNumber.divide(totalSaleNumber,4,BigDecimal.ROUND_HALF_EVEN);
percent = percent.divide(BigDecimal.valueOf(0.01d),2,BigDecimal.ROUND_HALF_EVEN);
product.setTotalBackPercent(percent.toString()+"%");
productList.add(product);
}
return productList;
}
public FlexPageObject getProductPageList(int pageNumber){
if(pageNumber<=0){
pageNumber = 1;
}
if(pageNumber>pageTotal){
pageNumber = pageTotal;
}
int productCode = pageSize*(pageNumber-1);
productCode++;
FlexPageObject flexPageObject = new FlexPageObject();
List<Product> productList = new ArrayList<Product>();
Product product = null;
for(int i=0;i<pageSize;i++){
product = new Product();
product.setProductId(""+productCode);
product.setProductName(ContentUtil.getProductName(i));
product.setProductArea(ContentUtil.getProductArea(i));
product.setTotalSaleNumber(ContentUtil.getProductTotalSale(i));
product.setTotalBackNumber(ContentUtil.getProductTotalBack(i));
BigDecimal totalBackNumber = BigDecimal.valueOf(product.getTotalBackNumber());
BigDecimal totalSaleNumber = BigDecimal.valueOf(product.getTotalSaleNumber());
BigDecimal percent = totalBackNumber.divide(totalSaleNumber,4,BigDecimal.ROUND_HALF_EVEN);
percent = percent.divide(BigDecimal.valueOf(0.01d),2,BigDecimal.ROUND_HALF_EVEN);
product.setTotalBackPercent(percent.toString()+"%");
productList.add(product);
productCode++;
}
flexPageObject.setObjectList(productList);
flexPageObject.setPageNumber(pageNumber);
flexPageObject.setPageSize(pageSize);
flexPageObject.setPageTotal(pageTotal);
return flexPageObject;
}
public FlexPageObject getMutilProductPageList(int pageNumber){
if(pageNumber<=0){
pageNumber = 1;
}
if(pageNumber>pageTotal){
pageNumber = pageTotal;
}
int productCode = pageSize*(pageNumber-1);
productCode++;
FlexPageObject flexPageObject = new FlexPageObject();
List<Product> productList = new ArrayList<Product>();
Product product = null;
for(int i=0;i<pageSize;i++){
product = new Product();
product.setProductId(""+productCode);
product.setProductName(ContentUtil.getProductName(i));
product.setProductArea(ContentUtil.getProductArea(i));
product.setTotalSaleNumber(ContentUtil.getProductTotalSale(i));
product.setTotalBackNumber(ContentUtil.getProductTotalBack(i));
BigDecimal backNumber = BigDecimal.valueOf(product.getTotalBackNumber());
BigDecimal saleNumber = BigDecimal.valueOf(product.getTotalSaleNumber());
BigDecimal percent = backNumber.divide(saleNumber,4,BigDecimal.ROUND_HALF_EVEN);
percent = percent.divide(BigDecimal.valueOf(0.01d),2,BigDecimal.ROUND_HALF_EVEN);
product.setTotalBackPercent(percent.toString()+"%");
product.setWeekSaleNumber(ContentUtil.getProductWeekSale(i));
product.setWeekBackNumber(ContentUtil.getProductWeekBack(i));
backNumber = BigDecimal.valueOf(product.getWeekBackNumber());
saleNumber = BigDecimal.valueOf(product.getWeekSaleNumber());
percent = backNumber.divide(saleNumber,4,BigDecimal.ROUND_HALF_EVEN);
percent = percent.divide(BigDecimal.valueOf(0.01d),2,BigDecimal.ROUND_HALF_EVEN);
product.setWeekBackPercent(percent.toString()+"%");
product.setYesterdaySaleNumber(ContentUtil.getProductYesterdaySale(i));
product.setYesterdayBackNumber(ContentUtil.getProductYesterdayBack(i));
productList.add(product);
productCode++;
}
flexPageObject.setObjectList(productList);
flexPageObject.setPageNumber(pageNumber);
flexPageObject.setPageSize(pageSize);
flexPageObject.setPageTotal(pageTotal);
return flexPageObject;
}
}
组装对象
public class Product {
private String productId;//产品编号
private String productName;//产品名称
private String productArea;//产品出差地
private String countWeek;//统计周数
private int totalSaleNumber;//累计总销售数
private int totalBackNumber;//累计总退回数
private String totalBackPercent;//总返回率
private int weekSaleNumber;//本周销售数
private int weekBackNumber;//本周退回数
private String weekBackPercent;//本周返回率
private int yesterdaySaleNumber;//昨日销售数
private int yesterdayBackNumber;//昨日退回数
}
分页对象
public class FlexPageObject {
private int pageNumber;//当前页
private int pageSize;//页大小
private int pageTotal;//总页数
private List<?> objectList;//分页对象集合
}
第一个flex调用的table的mxml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.rpc.events.ResultEvent;
import mx.collections.ArrayCollection;
[Bindable]
public var productWeekDataSource:ArrayCollection = new ArrayCollection(
[{label:"2010年5月31日-6月6日", data:1},
{label:"2010年6月7日-6月13日", data:2},
{label:"2010年6月14日-6月20日", data:3}]);
[Bindable]
public var productAreaDataSource:ArrayCollection = new ArrayCollection(
[{label:"成都", data:1},
{label:"杭州", data:2},
{label:"武汉", data:3},
{label:"上海", data:4},
{label:"广州", data:5},
{label:"北京", data:6},
{label:"青岛", data:7},
{label:"南京", data:8},
{label:"苏州", data:9}]);
[Bindable]
public var productSaleDataSource:ArrayCollection = new ArrayCollection(
[{label:"销售数", data:1},
{label:"回退数", data:2}]);
private var rerultProductList:ArrayCollection;
public function handleQueryData(event:ResultEvent):void{
rerultProductList = ArrayCollection(event.result);
productList.dataProvider = rerultProductList;
}
public function clearQueryData():void{
productList.dataProvider = null;
}
]]>
</mx:Script>
<mx:RemoteObject id="productDataSource" destination="flexProductService" result="handleQueryData(event)">
</mx:RemoteObject>
<mx:Panel x="10" y="10" width="969" height="508" layout="absolute" borderColor="#EFCBCB" fontSize="12">
<mx:ComboBox x="48" y="10" width="193" id="marketweek" dataProvider="{productWeekDataSource}"></mx:ComboBox>
<mx:ComboBox x="282" y="10" width="128" id="marketarea" dataProvider="{productAreaDataSource}"></mx:ComboBox>
<mx:ComboBox x="446" y="10" width="131" id="marketproduct" dataProvider="{productSaleDataSource}"></mx:ComboBox>
<mx:Button x="624" y="11" label="查询" fontSize="12" click="productDataSource.getProductList()"/>
<mx:DataGrid x="19" y="59" width="920" height="334" id="productList">
<mx:columns>
<mx:DataGridColumn headerText="产品编码" dataField="productId"/>
<mx:DataGridColumn headerText="产品名称" dataField="productName"/>
<mx:DataGridColumn headerText="产品产地" dataField="productArea"/>
<mx:DataGridColumn headerText="销售数" dataField="totalSaleNumber"/>
<mx:DataGridColumn headerText="退回数" dataField="totalBackNumber"/>
<mx:DataGridColumn headerText="退回率" dataField="totalBackPercent"/>
</mx:columns>
</mx:DataGrid>
<mx:Button x="712" y="11" label="清除" click="clearQueryData()"/>
</mx:Panel>
</mx:Application>