day53_BOS項目_05

  • 今天內容安排:
    • 1、添加定區
    • 2、定區分頁查詢
    • 3、hessian入門 --> 遠程調用技術
    • 4、基於hessian實現定區關聯客戶

1、添加定區

定區可以將取派員、分區、客戶信息關聯到一起。 頁面:WEB-INF/pages/base/decidedzone.jsp

第一步:使用下拉框展示取派員數據,需要修改combobox的URL地址,發送請求

    <tr>
        <td>選擇取派員</td>
        <td>
            <input class="easyui-combobox" name="staff.id"  
                data-options="valueField:'id',textField:'name',
                    url:'${pageContext.request.contextPath}/staffAction_listajax.action'" />  
        </td>
    </tr>

瀏覽器效果截圖:

第二步:在StaffAction中提供listajax()方法,查詢沒有作廢的取派員,並返回json數據

    /**
     * 查詢沒有作廢的取派員,並返回json數據
     * @return
     * @throws IOException 
     */
    public String listajax() throws IOException {
        List<Staff> list = staffService.findListNoDelete();
        String[] excludes = new String[] {"decidedzones"}; // 我們只需要Staff的id和name即可,其餘的都不需要,本例中我們只排除關聯的分區對象
        this.writeList2Json(list, excludes);
        return "none";
    }

第三步:在StaffService中提供方法查詢沒有作廢的取派員

    /**
     * 查詢沒有作廢的取派員,即查詢條件:deltag值爲“0”
     */
    public List<Staff> findListNoDelete() {
        // 創建離線條件查詢對象
        DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Staff.class);
        // 向離線條件查詢對象中封裝條件
        detachedCriteria.add(Restrictions.eq("deltag", "0"));
        return staffDao.findByCriteria(detachedCriteria);
    }

第四步:在IBaseDao中提供通用的條件查詢方法 IBaseDao.java

    // 條件查詢(不帶分頁)
    public List<T> findByCriteria(DetachedCriteria detachedCriteria);

BaseDaoImpl.java

    /**
     * 通用條件查詢(不帶分頁)
     */
    public List<T> findByCriteria(DetachedCriteria detachedCriteria) {
        return this.getHibernateTemplate().findByCriteria(detachedCriteria);
    }

瀏覽器效果截圖:

第五步:使用數據表格datagrid展示未關聯到定區的分區數據 decidedzone.jsp

    <td valign="top">關聯分區</td>
    <td>
        <table id="subareaGrid"  class="easyui-datagrid" border="false" style="width:300px;height:300px" 
                data-options="url:'${pageContext.request.contextPath}/subareaAction_listajax.action',
                fitColumns:true,singleSelect:false">
            <thead>  
                <tr>  
                    <th data-options="field:'id',width:30,checkbox:true">編號</th>  
                    <th data-options="field:'addresskey',width:150">關鍵字</th>  
                    <th data-options="field:'position',width:200,align:'right'">位置</th>  
                </tr>  
            </thead> 
        </table>
    </td>

瀏覽器效果截圖:

第六步:在SubareaAction中提供listajax()方法,查詢未關聯到定區的分區數據,並返回json數據

    /**
     * 查詢未關聯到定區的分區數據,並返回json數據
     * @return
     * @throws IOException 
     */
    public String listajax() throws IOException {
        List<Subarea> list = subareaService.findListNotAssociation();
        String[] excludes = new String[] {"region", "decidedzone"}; // 本例中我們只排除關聯的區域對象和定區對象
        this.writeList2Json(list, excludes);
        return "none";
    }

Service層代碼:

    /**
     * 查詢未關聯到定區的分區數據,即查詢條件:decidedzone值爲“null”
     */
    public List<Subarea> findListNotAssociation() {
        // 創建離線條件查詢對象
        DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Subarea.class);
        // 向離線條件查詢對象中封裝條件
        // detachedCriteria.add(Restrictions.eq("decidedzone", "null")); // 基本類型的屬性使用eq()和ne()
        detachedCriteria.add(Restrictions.isNull("decidedzone")); // 引用類型的屬性使用isNull()和isNotNull()
        return subareaDao.findByCriteria(detachedCriteria);
    }

瀏覽器效果截圖:

第七步:爲添加/修改定區窗口中的保存按鈕綁定事件

    <!-- 添加/修改分區 -->
    <div style="height:31px;overflow:hidden;" split="false" border="false" >
        <div class="datagrid-toolbar">
            <a id="save" icon="icon-save" href="#" class="easyui-linkbutton" plain="true" >保存</a>
            <script type="text/javascript">
                $(function() {
                    $("#save").click(function() {
                        var v = $("#addDecidedzoneForm").form("validate");
                        if (v) {
                            $("#addDecidedzoneForm").submit(); // 頁面會刷新
                            // $("#addDecidedzoneForm").form("submit"); // 頁面不會刷新
                        }
                    });
                });
            </script>
        </div>
    </div>

第八步:提交上面的添加定區的表單,發現id名稱衝突 瀏覽器截圖:

代碼截圖:

即:關聯分區中的複選框的field的名稱叫id,定區編碼的name名稱也叫id,造成衝突,服務器不能夠區分開他們哪個id是定區,還是哪個id是分區,如何解決呢? 答:我們應該類比於選擇取派員的name的名稱staff.id這樣,如上圖綠色框框中的那樣,即我們可以把關聯分區中的複選框的field的名稱改爲subareaid。 即:我們要在Subarea類中提供getSubareaid()方法,就相當於給Subarea類中的字段id重新起個名字,這樣返回的json數據中就含有subareaid字段了。

Subarea.java

改過之後,瀏覽器截圖:

第十步:創建定區管理的Action,提供add()方法保存定區,提供subareaid數組屬性接收多個分區的subareaid

package com.itheima.bos.web.action;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.itheima.bos.domain.Decidedzone;
import com.itheima.bos.web.action.base.BaseAction;

/**
 * 定區設置
 * @author Bruce
 *
 */
@Controller
@Scope("prototype")
public class DecidedzoneAction extends BaseAction<Decidedzone> {

    // 採用屬性驅動的方式,接收頁面提交過來的參數subareaid(多個,需要用到數組進行接收)
    private String[] subareaid;
    public void setSubareaid(String[] subareaid) {
        this.subareaid = subareaid;
    }

    /**
     * 添加定區
     * @return
     */
    public String add() {
        decidedzoneService.save(model, subareaid);
        return "list";
    }
}

Service層代碼:

package com.itheima.bos.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.itheima.bos.dao.IDecidedzoneDao;
import com.itheima.bos.dao.ISubareaDao;
import com.itheima.bos.domain.Decidedzone;
import com.itheima.bos.domain.Subarea;
import com.itheima.bos.service.IDecidedzoneService;

@Service
@Transactional
public class DecidedzoneServiceImpl implements IDecidedzoneService {

    // 注入定區dao
    @Autowired
    private IDecidedzoneDao decidedzoneDao;
    // 注入分區dao
    @Autowired
    private ISubareaDao subareaDao;
    /**
     * 添加定區,並修改分區的外鍵
     */
    public void save(Decidedzone model, String[] subareaid) {
        // 先保存定區表(一個定區含有多個分區)
        decidedzoneDao.save(model);

        // 再修改分區表的外鍵,java代碼如何體現呢?答:讓這兩個對象關聯下即可。誰關聯誰都行。
        // 但是在關聯之前,我們應該有意識去檢查下通過反轉引擎自動生成出來的Hibernate配置文件中,誰放棄了維護外鍵的能力。
        // 一般而言:是“一”的一方放棄。所以需要由“多”的一方來維護外鍵關係。

        for (String sid : subareaid) {
            // 根據分區id把分區對象查詢出來,再讓分區對象去關聯定區對象model
            Subarea subarea = subareaDao.findById(sid); // 持久化對象
            // 分區對象 關聯 定區對象 --> 多方關聯一方
            subarea.setDecidedzone(model); // 關聯完之後,會自動更新數據庫,根據快照去對比,看看我們取出來的持久化對象是否跟快照長得不一樣,若不一樣,就刷新緩存。

            // 從效率的角度講:我們應該拼接一個HQL語句去更新Subarea,而不是去使用Hibernate框架通過關聯的方式更新
            // HQL:update Subarea set decidedzone=? where id=? -->
            // SQL:update bc_subarea set decidedzone_id=? where id=?
        }
    }
}

第十一步:配置struts.xml

    <!-- 定區管理:配置decidedzoneAction-->
    <action name="decidedzoneAction_*" class="decidedzoneAction" method="{1}">
        <result name="list">/WEB-INF/pages/base/decidedzone.jsp</result>
    </action>

2、定區分頁查詢

第一步:decidedzone.jsp頁面修改datagrid的URL

    // 定區標準數據表格
    $('#grid').datagrid( {
        iconCls : 'icon-forward',
        fit : true,
        border : true,
        rownumbers : true,
        striped : true,
        pageList: [30,50,100],
        pagination : true,
        toolbar : toolbar,
        url : "${pageContext.request.contextPath}/decidedzoneAction_pageQuery.action",
        idField : 'id',
        columns : columns,
        onDblClickRow : doDblClickRow
    });

第二步:在DecidedzoneAction中提供分頁查詢方法

    /**
     * 分頁查詢
     * @return
     * @throws IOException 
     */
    public String pageQuery() throws IOException {
        decidedzoneService.pageQuery(pageBean);
        String[] excludes = new String[] {"currentPage", "pageSize", "detachedCriteria", "subareas", "decidedzones"};
        this.writePageBean2Json(pageBean, excludes);
        return "none";
    }

第三步:修改Decidedzone.hbm.xml文件,取消懶加載

3、hessian入門 --> 遠程調用技術

  • Hessian是一個輕量級的 remoting on http 工具,使用簡單的方法提供了RMI(Remote Method Invocation 遠程方法調用)的功能。相比WebService,Hessian更簡單、快捷。採用的是二進制RPC協議(Remote Procedure Call Protocol 遠程過程調用協議),因爲採用的是二進制協議,所以它很適合於發送二進制數據
  • 常見的遠程調用的技術:
    • 1、webservice(CXF框架、axis框架),偏傳統,基於soap(簡單對象訪問協議)協議,傳輸的是xml格式的數據,數據冗餘比較大,傳輸效率低。現在也支持json。
    • 2、httpclient --> 電商項目:淘淘商城,大量使用
    • 3、hessian --> http協議、傳輸的是二進制數據,冗餘較少,傳輸效率較高。
    • 4、dubbo --> 阿里巴巴
  • Dubbo是阿里巴巴SOA服務化治理方案的核心框架,每天爲2,000+個服務提供3,000,000,000+次訪問量支持,並被廣泛應用於阿里巴巴集團的各成員站點。自開源後,已有不少非阿里系公司在使用Dubbo。
  • Tengine是由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了很多高級功能和特性。Tengine的性能和穩定性已經在大型的網站如淘寶網,天貓商城等得到了很好的檢驗。它的最終目標是打造一個高效、穩定、安全、易用的Web平臺。
  • hessian有兩種發佈服務的方式:
    • 1、使用hessian框架自己提供的HessianServlet發佈:com.caucho.hessian.server.HessianServlet
    • 2、和spring整合發佈服務:org.springframework.web.servlet.DispatcherServlet
  • hessian入門案例

服務端開發: 第一步:創建一個java web項目,並導入hessian的jar包 第二步:創建一個接口

    public interface HelloService {
        public String sayHello(String name);
        public List<User> findAllUser();
    }

第三步:提供上面接口的實現類

    public class HelloServiceImpl implements HelloService {
        public String sayHello(String name) {
            System.out.println("sayHello方法被調用了");
            return "hello " + name;
        }

        public List<User> findAllUser() {
            List<User> list = new ArrayList<User>();
            list.add(new User(1, "小藝"));
            list.add(new User(2, "小軍"));
            return list;
        }
    }

第四步:在web.xml中配置服務

    <servlet>
        <servlet-name>hessian</servlet-name>
        <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
        <init-param>
            <param-name>home-class</param-name>
            <param-value>com.itheima.HelloServiceImpl</param-value>
        </init-param>
        <init-param>
            <param-name>home-api</param-name>
            <param-value>com.itheima.HelloService</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>hessian</servlet-name>
        <url-pattern>/hessian</url-pattern>
    </servlet-mapping>

客戶端開發: 第一步:創建一個客戶端項目(普通java項目即可),並導入hessian的jar包 第二步:創建一個接口(和服務端接口對應)

    public interface HelloService {
        public String sayHello(String name);
        public List<User> findAllUser();
    }

第三步:使用hessian提供的方式創建遠程代理對象調用服務

public class Test {

    public static void main(String[] args) throws MalformedURLException {
        // 通過hessian提供的工廠類創建一個代理對象,通過這個代理對象可以遠程調用服務
        HessianProxyFactory factory = new HessianProxyFactory();
        HelloService remoteProxy= (HelloService) factory.create(HelloService.class, "http://localhost:8080/hessian_server/hessian");

        String ret = remoteProxy.sayHello("test");
        System.out.println(ret);

        List<User> list = remoteProxy.findAllUser();
        for (User user : list) {
            System.out.println(user.getId() + "---" + user.getName());
        }
    }
}

4、基於hessian實現定區關聯客戶

4.1、發佈crm服務並測試訪問

第一步:創建動態的web項目crm,導入hessian的jar 第二步:創建一個crm數據庫和t_customer表

第三步:在web.xml中配置spring的DispatcherServlet

    <!-- hessian發佈服務的方式:和spring整合發佈服務:org.springframework.web.servlet.DispatcherServlet -->
    <servlet>
        <servlet-name>remoting</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>remoting</servlet-name>
        <url-pattern>/remoting/*</url-pattern>
    </servlet-mapping>

第四步:提供接口CustomerService和Customer類、Customer.hbm.xml映射文件 CustomerService.java

package cn.itcast.crm.service;

import java.util.List;

import cn.itcast.crm.domain.Customer;

// 客戶服務接口 
public interface CustomerService {
    // 查詢未關聯定區客戶
    public List<Customer> findnoassociationCustomers();

    // 查詢已經關聯指定定區的客戶
    public List<Customer> findhasassociationCustomers(String decidedZoneId);

    // 將未關聯定區客戶關聯到定區上
    public void assignCustomersToDecidedZone(Integer[] customerIds, String decidedZoneId);
}

第五步:爲上面的CustomerService接口提供實現類

package cn.itcast.crm.service.impl;

import java.util.List;

import org.hibernate.Session;

import cn.itcast.crm.domain.Customer;
import cn.itcast.crm.service.CustomerService;
import cn.itcast.crm.utils.HibernateUtils;

public class CustomerServiceImpl implements CustomerService {

    public List<Customer> findnoassociationCustomers() {
        Session session = HibernateUtils.openSession();
        session.beginTransaction();

        String hql = "from Customer where decidedzone_id is null";
        List<Customer> customers = session.createQuery(hql).list();

        session.getTransaction().commit();
        session.close();

        return customers;
    }

    public List<Customer> findhasassociationCustomers(String decidedZoneId) {
        Session session = HibernateUtils.openSession();
        session.beginTransaction();

        String hql = "from Customer where decidedzone_id=?";
        List<Customer> customers = session.createQuery(hql).setParameter(0, decidedZoneId).list();

        session.getTransaction().commit();
        session.close();

        return customers;
    }

    public void assignCustomersToDecidedZone(Integer[] customerIds, String decidedZoneId) {
        Session session = HibernateUtils.openSession();
        session.beginTransaction();

        // 取消定區所有關聯客戶
        String hql2 = "update Customer set decidedzone_id=null where decidedzone_id=?";
        session.createQuery(hql2).setParameter(0, decidedZoneId).executeUpdate();

        // 進行關聯
        String hql = "update Customer set decidedzone_id=? where id=?";
        if (customerIds != null) {
            for (Integer id : customerIds) {
                session.createQuery(hql).setParameter(0, decidedZoneId).setParameter(1, id).executeUpdate();
            }
        }
        session.getTransaction().commit();
        session.close();
    }
}

第六步:在WEB-INF目錄提供spring的配置文件remoting-servlet.xml

    <!-- 通過配置的方式對外發布服務 -->
    <!-- 業務接口實現類  -->
    <bean id="customerService" class="cn.itcast.crm.service.impl.CustomerServiceImpl" />

    <!-- 註冊hessian服務 -->
    <bean id="/customer" class="org.springframework.remoting.caucho.HessianServiceExporter">
        <!-- 業務接口實現類 -->
        <property name="service" ref="customerService" />
        <!-- 業務接口 -->
        <property name="serviceInterface" value="cn.itcast.crm.service.CustomerService" />
    </bean>

第七步:發佈crm服務 第八步:在hessian_client客戶端調用crm服務獲得客戶數據 注意:拷貝接口CustomerService代碼文件放到客戶端中,同時必須在hessian_client客戶端新建和crm服務端一樣的實體Bean目錄,如下圖所示:

hessian_client客戶端調用代碼如下:

package com.itheima;

import java.net.MalformedURLException;
import java.util.List;

import org.junit.Test;

import com.caucho.hessian.client.HessianProxyFactory;

import cn.itcast.crm.domain.Customer;

public class TestService {
    @Test
    public void test1() throws MalformedURLException {
        // 通過hessian提供的工廠類創建一個代理對象,通過這個代理對象可以遠程調用服務
        HessianProxyFactory factory = new HessianProxyFactory();
        CustomerService remoteProxy= (CustomerService) factory.create(CustomerService.class, "http://localhost:8080/crm/remoting/customer");
        List<Customer> list = remoteProxy.findnoassociationCustomers();
        for (Customer customer : list) {
            System.out.println(customer);
        }

        // 上面的演示方式:我們手動創建一個代理對象,通過代理對象去調用,然後獲取服務端發佈的客戶數據。
        // 實際的開發方式:我們只需要在applicationContext.xml中配置一下,由spring工廠幫我們去創建代理對象,再將該代理對象注入給action、service,他們再去使用該代理對象即可。
        // 如何配置呢?配置相關代碼如下:
        /*
        <!-- 配置遠程服務的代理對象 -->
        <bean id="customerService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
            <property name="serviceInterface" value="cn.itcast.bos.service.ICustomerService"/>
            <property name="serviceUrl" value="http://localhost:8080/crm/remoting/customer"/>
        </bean>
        */
    }
}

客戶端控制檯輸出:

cn.itcast.crm.domain.Customer@59b746f
cn.itcast.crm.domain.Customer@20f92649
cn.itcast.crm.domain.Customer@45409388
cn.itcast.crm.domain.Customer@1295e93d
cn.itcast.crm.domain.Customer@3003ad53
cn.itcast.crm.domain.Customer@41683cc5
cn.itcast.crm.domain.Customer@226dcb0f
cn.itcast.crm.domain.Customer@562e5771

服務端控制檯輸出:

Hibernate: 
    select
        customer0_.id as id0_,
        customer0_.name as name0_,
        customer0_.station as station0_,
        customer0_.telephone as telephone0_,
        customer0_.address as address0_,
        customer0_.decidedzone_id as decidedz6_0_ 
    from
        t_customer customer0_ 
    where
        customer0_.decidedzone_id is null

4.2、在bos項目中調用crm服務獲得客戶數據

第一步:在bos項目中導入hessian的jar包 第二步:從crm項目中複製CustomerService接口和Customer類到bos項目中 第三步:在spring配置文件中配置一個遠程服務代理對象,調用crm服務

    <!-- 配置遠程服務的代理對象 -->
    <bean id="customerService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
        <property name="serviceInterface" value="com.itheima.bos.crm.CustomerService"/>
        <property name="serviceUrl" value="http://localhost:8080/crm/remoting/customer"/>
    </bean>

第四步:將上面的代理對象通過註解方式注入到BaseAction中

    @Autowired 
    protected CustomerService remoteProxy;

第五步:爲定區列表頁面中的“關聯客戶”按鈕綁定事件,發送2次ajax請求訪問DecidedzoneAction,在DecidedzoneAction中調用hessian代理對象,通過代理對象可以遠程訪問crm獲取客戶數據,獲取數據後進行解析後,填充至左右下拉框中去

    // 設置全局變量:存儲選中一個定區時的 定區id
    var decidedzoneid;
    // 關聯客戶窗口
    function doAssociations(){
        // 在打開關聯客戶窗口之前判斷是否選中了一個定區,即獲得選中的行
        var rows = $("#grid").datagrid("getSelections");
        if (rows.length == 1) {
            // 打開窗口
            $("#customerWindow").window('open');
            // 清空窗口中的下拉框內容
            $("#noassociationSelect").empty();
            $("#associationSelect").empty();

            // 發送ajax請求獲取未關聯到定區的客戶(左側下拉框)
            var url1 = "${pageContext.request.contextPath}/decidedzoneAction_findnoassociationCustomers.action";
            $.post(url1, {}, function(data) {
                // alert(data); // json數據
                // 解析json數據,填充至左側下拉框中去
                for (var i = 0; i < data.length; i++) {
                    var id = data[i].id;
                    var name = data[i].name;
                    $("#noassociationSelect").append("<option value='" + id + "'>" + name + "</option>");
                }
            }, 'json');

            decidedzoneid = rows[0].id;
            // 發送ajax請求獲取關聯到當前選中定區的客戶(右側下拉框)
            var url2 = "${pageContext.request.contextPath}/decidedzoneAction_findhasassociationCustomers.action";
            $.post(url2, {"id":decidedzoneid}, function(data) {
                // alert(data); // json數據
                // 解析json數據,填充至右側下拉框中去
                for (var i = 0; i < data.length; i++) {
                    var id = data[i].id;
                    var name = data[i].name;
                    $("#associationSelect").append("<option value='" + id + "'>" + name + "</option>");
                }
            }, 'json');
        } else {
            // 沒有選中或選中多個,提示信息
            $.messager.alert("提示信息","請選擇一條定區記錄進行操作","warning");
        }
    }

第六步:爲“左右移動按鈕”綁定事件

    <td>
        <input type="button" value="》》" id="toRight"><br/>
        <input type="button" value="《《" id="toLeft">
        <script type="text/javascript">
            $(function() {
                // 爲右移動按鈕綁定事件
                $("#toRight").click(function() {
                    $("#associationSelect").append($("#noassociationSelect option:selected"));
                    $("#associationSelect>option").removeAttr("selected"); // 移除它們默認的選中狀態
                });
                // 爲右移動按鈕綁定事件
                $("#toLeft").click(function() {
                    $("#noassociationSelect").append($("#associationSelect option:selected"));
                    $("#noassociationSelect>option").removeAttr("selected"); // 移除它們默認的選中狀態
                });
            });
        </script>
    </td>

第七步:爲關聯客戶窗口中的“關聯客戶”按鈕綁定事件

<script type="text/javascript">
    $(function() {
        // 爲關聯客戶按鈕綁定事件
        $("#associationBtn").click(function() {
            // 在提交表單之前,選中右側下拉框中所有的選項
            $("#associationSelect option").attr("selected", "selected"); // attr(key, val) 給一個指定屬性名設置值
            // 在提交表單之前設置隱藏域的值(定區id)
            $("input[name=id]").val(decidedzoneid);
            // 提交表單
            $("#customerForm").submit();
        });
    });
</script>

第八步:在定區Action中接收提交的參數,調用crm服務實現定區關聯客戶的業務功能

    /**
     * 調用代理對象,查詢未關聯到定區的客戶
     * @return
     * @throws IOException 
     */
    public String findnoassociationCustomers() throws IOException {
        List<Customer> list = remoteProxy.findnoassociationCustomers();
        String[] excludes = new String[] {"station", "address"};
        this.writeList2Json(list, excludes);
        return "none";
    }

    /**
     * 調用代理對象,查詢已經關聯到指定定區的客戶
     * @return
     * @throws IOException 
     */
    public String findhasassociationCustomers() throws IOException {
        List<Customer> list = remoteProxy.findhasassociationCustomers(model.getId());
        String[] excludes = new String[] {"station", "address"};
        this.writeList2Json(list, excludes);
        return "none";
    }

    // 採用屬性驅動的方式,接收頁面提交過來的參數customerIds(多個,需要用到數組進行接收)
    private Integer[] customerIds;
    public void setCustomerIds(Integer[] customerIds) {
        this.customerIds = customerIds;
    }

    /**
     * 調用代理對象,將未關聯定區的客戶關聯到定區上
     * @return
     */
    public String assignCustomersToDecidedZone() {
        remoteProxy.assignCustomersToDecidedZone(customerIds, model.getId());
        return "list";
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章