단건 Action과 다건 Action 에 대해서 테스트 해보았다.

다건 Action의 경우 인터넷에서 구한 것과 WebWork 자체에서 제공하는 것 모두 테스트 해보았다.
(Struts 의 DispatchActionSupport 유사한 기능)

WebWork에서 제공하는 MultiAction의 경우 함수가 추가될때마다 설정을 추가해줘야 하는 불편함이 있는 것 같다.
또한 Struts 와 다르게 get,set를 이용한 파라미터 사용 방법은 단일 Action일때는 편리하나 MultiAction 일경우 함수 공통으로 모두 만들어줘야 하므로 특정 함수에서 사용하는 파라미터를 찾기 위해서는 난감한  것 같다.

[xwork.xml]

    
    
        
        
        
        
			/test.jsp
			/error.jsp
        
        
        
        
			/test.jsp
			/error.jsp
        
        
                
        
			/test.jsp
			/error.jsp
                
        
			/test.jsp
			/error.jsp
        
    



Excel 내용을 Flex Grid에 표현하려면 가장 일반적인 방법은 Server 에 Upload 후 POI나 JXL OpenSource를 이용하여 읽은 후 Client 로 내린 후 Flex Grid에 뿌리면 되겠다.

하지만 많이 복잡하다.

그리하여 생각한것이 IE에 한정된 방법이긴 하지만 IE제공하는 Excel.Application ActiveX를 이용하는 방법이다.

javascript 에서 Excel을 읽은 후 Flex에 내용을 던저 주는 방식을 사용했다.

우선 Flex에서 해당 파일을 선택 해야 하는데 FileReference 객체를 사용하려 하였다.
하지만 Flex 보안정책상 파일명은 리턴되지만 Client의 파일 경로는 리턴되지 않았다.

그리하여 HTML에서 지원하는 input type="file" 과 javascript 를 이용하여 파일을 선택후 경로 및 파일명을 얻는 방법을 찾았다.

소스 첨부하였다.
저도 asp로는 ajax를 안 해보다가 우연히 친구가 삽질하고 있어서 같이 해보던중 찾은 답입니다.
도움되실지 모르겠네요.


아래와 같이 콜백 받으시고요.
var xmlStr = req.responseBody;         
xmlStr = BinDecode(xmlStr);         
var xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
xmlDoc.async = false;
xmlDoc.loadXML(xmlStr);
var cnt = xmlDoc.getElementsByTagName("cnt").item(0).firstChild.nodeValue;


BinDecode 함수는 vb스크립트로 하시면 되요.
자바스크립트로도 만들수 있겠지만 귀찮아서 인터넷에 있는거 그대로 썼습니다.
출처는 잃어버렸네요. 네이버에서 검색해서 얻었어요.
제공하신분 감사합니다.(지금검색해보니 http://cafe.naver.com/jcode.cafe?iframe_url=/ArticleRead.nhn%
3Farticleid=32) 요기에 있네요.

<script language="vbscript">
   Public Function BinDecode(byVal binData)
Dim i, byteChr, strV
For i = 1 to LenB(binData)
byteChr = AscB(MidB(binData,i,2))
If byteChr > 127 Then
i = i + 1
strV = strV & Chr("&H" & Hex(byteChr) & Hex(AscB(MidB(binData,i,2))))
Else
strV = strV & Chr(byteChr)
End if
Next
BinDecode = strV
End Function
</script>

이렇게 안 하고 UTF-8로 저장하고 일반적인 방법으로 하면 안되더라구요.. 왜 그런건지.
그냥 간편히 jQuery 같은 library 사용하시는게 속편하실듯 합니다.
ANT 로 Flex 컴파일 시 Java heap space OutOfMemoryError 날 경우

해당 ANT xml 파일에서 마우스 오른쪽 ->  Rus as -> External Tools Configurations -> JRE -> VM arguments

위 설정에 아래와 같이 값을 준다.

-Xmx512m

근데 eclipse 3.4 에서는 위와 같은 방법으로 해도 안되네.. 아시는분 ㅠㅠ
eclipse 3.5 가 나왔던데 이 버전에서는 잘 될련지.. 빨리 3.5 버전을 지원하는 flex plugin이 나왔으면 좋겠다.
[엑셀 일 경우 Win XP]
폴더옵션 - 파일형식
열기클릭 후 응용프로그램 제일 끝에 아래와 같이 수정
 /en "%1"

[엑셀 일 경우 Win 7] 
1. regedit 실행
2. HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\command\command 항목 삭제
3. HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\command\기본값 항목 수정
    "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE" /en "%1"
3. HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\ddeexec\  폴더 삭제



[파워포인트 일 경우]


[Window 일 경우]
/conf/modules/mod_jk를 위치 시킨다.

[/conf/httpd.conf 수정]

마지막 줄에 추가
LoadModule jk_module modules/mod_jk.so
<IfModule jk_module>
JkWorkersFile conf/workers.properties
JkLogFile logs/jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkMount /*.jsp tomcat
JkMount /servlet/* tomcat
JkMount /*.do tomcat
JkMount /*.lnj tomcat
JkMount /*.xlnj tomcat
</IfModule>

conf/workers.properties 추가하고
worker.list=tomcat 
worker.tomcat.type=ajp13
worker.tomcat.host=localhost
worker.tomcat.port=8009

위쪽에 DocumentRoot 검색해서 자신이 지정한 tomcat ROOT 디렉토리 지정
DocumentRoot "D:/project/flexServer"

윗쪽에 <Directory "C:/apache/htdocs 로 된부분 자신이 지정한 tomcat ROOT 디렉토리 지정
<Directory "D:/project/flexServer">

tomcat에서 Context 를 추가하였다면 아래와 같이 자신에 맞게 추가
Alias /disk "D:/project/disk/" 
<Directory "D:/project/disk/"> 
Options Indexes MultiViews 
AllowOverride None 
Order allow,deny 
Allow from all 
</Directory>

php 디렉토리 밑에 아래 파일과 같이 수정
php.ini-recommended -> php.ini

php 설치 디렉토리에 맞춰서 수정
# PHP 5 settings
LoadModule php5_module "C:/php-5.2.8/php5apache2_2.dll"
AddType application/x-httpd-php .php .html .htm
AddType application/x-httpd-php-source .phps

[Ubuntu 9.10 일 경우]

apt-get install apache2 libapache2-mod-jk

/etc/libapache2-mod-jk/workers.properties
tomcat_home, java_home 경로 수정

/etc/apache2/mods-enabled/jk.load
LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so

JkWorkersFile /etc/libapache2-mod-jk/workers.properties
JkLogFile /var/log/apache2/mod_jk.log
JkLogLevel info
JkOptions +ForwardURICompatUnparsed

/etc/apache2/sites-enabled/000-default 
<VirtualHost> 사이에
JkMount /*.jsp ajp13_worker
JkMount /servlet/* ajp13_worker
JkMount /*.do ajp13_worker
JkMount /*.lnj ajp13_worker
JkMount /*.xlnj ajp13_worker

/etc/apache2/httpd.conf
# Apache에서 index.jsp 시작 페이지로 추가
<IfModule dir_module>
    DirectoryIndex index.htm index.html index.jsp
</IfModule>

# WEB-INF 하위 접근 막기
<LocationMatch "/WEB-INF">
    deny from all
</LocationMatch>

jk 올리기
a2enmod jk

apahce 재시작
     
          Request Encoding
          org.springframework.web.filter.CharacterEncodingFilter
          
               encoding
               UTF-8
          
     
     
          Request Encoding
          dispatcher
     
[소스상에서 Transaction 처리]
public class DemoServiceImpl extends JdbcDaoSupport implements DemoService {

	private TransactionTemplate txTemplate;
	
	public void setTransactionManager(PlatformTransactionManager txManager) {
		this.txTemplate = new TransactionTemplate(txManager);
		this.txTemplate.setPropagationBehavior(DefaultTransactionDefinition.PROPAGATION_REQUIRED);
	}
	
	public int selectTest() throws Exception{
		// Transaction Handling
		txTemplate.execute(new TransactionCallbackWithoutResult() {
			public void doInTransactionWithoutResult(TransactionStatus status) {
				int cnt = getJdbcTemplate().update("insert into ddakker_test(SEQ, TXT)values(?,?)", new Object[]{"4","txt4"});
			    System.out.println("insert cnt: " + cnt);
			    int cnt2 = getJdbcTemplate().update("insert into ddakker_test(SEQ, TXT1)values(?,?)", new Object[]{"5","txt5"});
			    System.out.println("insert cnt2: " + cnt2);				
			}			
		});
	    
		List  list; 
	    Object params[] = {3};	    
	    list = getJdbcTemplate().queryForList("select seq, txt from ddakker_test where seq = ?", params);
	    
	    System.out.println("list1: " + list.size());
	    Iterator i = list.iterator();
	    System.out.println("i : " + i);
	    while(i.hasNext()){
	    	Map map = (Map) i.next();
	    	System.out.println("map" + map);
	    }
	    
		return 0;
	}
}
	
		
	

	
		
		
	

[설정파일에서 Transaction 처리]
public class Demo2Servicelmpl extends JdbcDaoSupport implements Demo2Service {
	
	public int selectTest() throws Exception {		
		int cnt = getJdbcTemplate().update("insert into ddakker_test(SEQ, TXT)values(?,?)", new Object[]{"4","txt4"});
	    System.out.println("insert cnt: " + cnt);
	    int cnt2 = getJdbcTemplate().update("insert into ddakker_test(SEQ, TXT1)values(?,?)", new Object[]{"5","txt5"});
	    System.out.println("insert cnt2: " + cnt2);
	    
		List  list; 
	    Object params[] = {3};	    
	    list = getJdbcTemplate().queryForList("select seq, txt from ddakker_test where seq = ?", params);
	    
	    System.out.println("list1: " + list.size());
	    Iterator i = list.iterator();
	    System.out.println("i : " + i);
	    while(i.hasNext()){
	    	Map map = (Map) i.next();
	    	System.out.println("map" + map);
	    }
	    
		return 0;
	}

}
	
		
	
	
	
		
		
		
		
			
				PROPAGATION_REQUIRED,-Exception
				PROPAGATION_SUPPORTS
			
		
	

[설정파일에서 Transaction 처리(AspectJ 를 이용한 한방 처리)]
	
	
		
	
	
	
		
		
	
    
		
			
		
	
		
	
		
	

 0  공백    
 1  널  adEmpty  0
 2  integer    
 3  Long adInteger  4
 4  Single    
 5  Double    
 6  Currency    
 7  Date  adDate
 8  String  adVarWChar  문자열 길이(길이가 0이면 4)
 9  Ole Object    
 10  Error    
 11  Boolean  adBoolean
 12  Variant    
 13  Non-OLE Object    
 17  Byte    
 8192  Array    

+ Recent posts