Top > SAStrutsあれこれ > Flexで従業員一覧を表示しましょう


Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
-
|
|
|
|
!
!
package tutorial.action;
 
import java.io.IOException;
import javax.annotation.Resource;
import javax.xml.bind.JAXBException;
import org.seasar.struts.annotation.Execute;
import tutorial.dto.Employees;
import tutorial.service.EmployeeService;
import tutorial.util.XmlUtil;
 
public class SearchEmployeeAction {
    
    @Resource
    protected EmployeeService employeeService;
    
    @Execute(validator = false)
    public String findAll() throws IOException, JAXBException {
        Employees employees = new Employees();
        employees.employeeList = employeeService.findAll();
        XmlUtil.sendXML(Employees.class, employees);
        return null;
    } 
}

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 
 
 
 
 
 
 
 
-
|
|
|
!
package tutorial.dto;
 
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import tutorial.entity.Employee;
 
@XmlRootElement(name="Employees")
public class Employees {
    
    @XmlElement(name="Employee")
    public List<Employee> employeeList;
}
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 
 
 
 
 
 
-
|
|
|
|
|
!
    /**
     * 従業員情報を全件取得します。
     * 住所情報と部署情報も結合して取得します。
     * @return
     */
    @Override
    public List<Employee> findAll() {
        return select()
               .innerJoin(address())
               .innerJoin(department())
               .orderBy(asc(id()))
               .getResultList();
    }
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
!
package tutorial.util;
 
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import org.seasar.struts.util.ResponseUtil;
 
public class XmlUtil {
 
    /**
     * JAXB2ヘルパーメソッド
     * 渡されたオブジェクトをXMLに変換して、クライアントへ送信します。
     * @param clazz objのクラス情報
     * @param obj XMLへの変換対象オブジェクト
     * @throws JAXBException
     * @throws IOException
     */
    static public <T> void sendXML(Class<T> clazz, Object obj) throws JAXBException, IOException {
        HttpServletResponse httpServletResponse = ResponseUtil.getResponse();
        httpServletResponse.setContentType("application/xml");
        httpServletResponse.setCharacterEncoding("UTF-8");
        
        // POJO -> XML 変換を行うマーシャラを生成
        // clazzクラスをバインディングするコンテキストを生成
        JAXBContext context = JAXBContext.newInstance(clazz);
        Marshaller ma = context.createMarshaller();
        ma.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        //ma.setProperty(Marshaller.JAXB_ENCODING , "UTF-8");
        
        // POJO -> XML 変換して送信
        OutputStream out = httpServletResponse.getOutputStream();
        
        //BOMを付加します。
        byte[] bom = {(byte)0xEF, (byte)0xBB, (byte)0xBF};
        out.write(bom);
 
        //XMLデータ本体を送信します。
        ma.marshal(obj, out);
        
        out.flush();
        out.close();
    }   
}
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
<?xml version="1.0" encoding="utf-8"?>
<!-- (1)applicationComplete="show()"はHTMLのonloadです。-->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:web="*" applicationComplete="show()">
    <mx:Script>
        <![CDATA[
            import mx.rpc.http.mxml.HTTPService;
            import mx.utils.ObjectUtil;
            import mx.controls.Alert;
            import mx.utils.URLUtil;
            import mx.rpc.AsyncToken;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;
            import mx.collections.XMLListCollection;
            import mx.collections.ArrayCollection;
            
            import util.SAStrutsUtils;
             
            private function show():void {
                dg1.dataProvider = null;
                SAStrutsUtils.post2sastruts("searchEmployee", SAStrutsUtils.REQ_FINDALL, resultHandler, faultHandler);
            }
            
            // HTTPServiceが成功
            private function resultHandler(e:ResultEvent):void {
                
                //サーバー側の処理結果をチェックします。
                if( e.result.result  * "success" ) {
                    //DataGridにデータを渡します
                    dg1.dataProvider = e.result.Content.Employee;
                } else {
                    Alert.show("サーバー処理失敗\n\n理由 : " + e.result.message);
                }
            }
            
            // HTTPServiceでエラーが発生した
            private function faultHandler(e:FaultEvent):void {
                Alert.show("HTTPService失敗\n\n理由 : " + e.fault.message);
            }
            
            //DataGridのDepartmentカラムにXMLの値をバインドする
            private function departmentColumnLabelFunction(item:Object, column:DataGridColumn):String {
                // itemにはEmployeeタグが来ます。子要素や属性はE4Xで取得
                return XML(item).department.name;
            }
            
            //DataGridのAddressカラムにXMLの値をバインドする
            private function addressColumnLabelFunction(item:Object, column:DataGridColumn):String {
                // itemにはEmployeeタグが来ます。子要素や属性はE4Xで取得
                return XML(item).address.name;
            }
            
        ]]>
    </mx:Script>
    
    <mx:Label x="10" y="10" text="Tutorial: Employee List" width="500" height="34" fontWeight="bold" fontFamily="MS ゴシック" fontSize="26"/>
    <mx:DataGrid width="500" id="dg1" editable="false" x="10" y="52" fontFamily="MS ゴシック">
        <mx:columns>
            <!-- (2)SAStrutsから取得するXMLデータと列をバインド-->
            <mx:DataGridColumn headerText="Id" dataField="id"/>
            <mx:DataGridColumn headerText="Name" dataField="name"/>
            <mx:DataGridColumn headerText="JobType" dataField="jobType"/>
            <mx:DataGridColumn headerText="Salary" dataField="salary"/>
            <mx:DataGridColumn headerText="Department" labelFunction="departmentColumnLabelFunction"/>
            <mx:DataGridColumn headerText="Address" labelFunction="addressColumnLabelFunction"/>
        </mx:columns>
    </mx:DataGrid>
    <mx:Button x="10" y="202" label="再読込" click="show()"/>
    
</mx:Application>







添付ファイル: fileflex_emp_list_2.jpg 374件 [詳細] fileflex_emp_list_1.jpg 420件 [詳細]

リロード   新規 編集 凍結解除 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2012-08-08 (水) 23:26:01 (2925d)