Whiteship's Note


14.5. XSLT

Spring/Chapter 14 : 2007.05.16 12:46


모델 데이타를 XML 형식으로 출력할 수 있습니다.

1. 컨트롤러를 만들고 등록합니다.

public class ViewMemberListWithXMLController extends AbstractController{

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
        List<MemberInfo> infos = ServiceManager.getMemberInfoService().getAll();
        Map<String, Object> members = new HashMap<String, Object>();
        members.put("members", infos);
        return new ModelAndView("memberListXml", members);
    }

}

<bean name="/viewMemberListWithXml.html" class="net.ailgejava.members.controller.ViewMemberListWithXMLController" />

2. 모델 데이타를 XML 로 만드는 view 클레스를 만듭니다.

public class MemberListXMLView extends AbstractXsltView {

    @SuppressWarnings("unchecked")
    @Override
    protected Source createXsltSource(Map model, String rootName, HttpServletRequest request, HttpServletResponse response) throws Exception {
        Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
        Element root = document.createElement(rootName);

        List<MemberInfo> memberInfos = (List<MemberInfo>) model.get("members");
        for (MemberInfo memberInfo : memberInfos) {
            String name = memberInfo.getName();
            String email = memberInfo.getEmail();
            String home = memberInfo.getHome();
            String pictureAddress = memberInfo.getPictureAddress();

            Element memberInfoNode = document.createElement("memberInfo");
            Text nameText = document.createTextNode(name);
            Text emailText = document.createTextNode(email);
            Text homeText = document.createTextNode(home);
            Text pictureAddressText = document.createTextNode(pictureAddress);

            memberInfoNode.appendChild(nameText);
            memberInfoNode.appendChild(emailText);
            memberInfoNode.appendChild(homeText);
            memberInfoNode.appendChild(pictureAddressText);

            root.appendChild(memberInfoNode);
        }

        return new DOMSource(root);
    }
}

이때 Text, Element, Document 객체의 패키지는 org.w3c.dom 패키지 입니다. 레퍼런스의 예제는 Generic을 사용하지 않는 Map과 List 그리고 Iterator를 명시적으로 사용하고 있더군요. Java 5버전 형태로 바꿔주면 좋을텐데 말이죠. :)

변수와 메소드 이름의 작명을 잘해뒀기 때문에 직감적으로 대강 어떻게 코딩 해야 하는지 알 수 있습니다.

3. 뷰 프로퍼티 파일 정의하기.

memberListXml.class = net.ailgejava.members.view.xml.MemberListXMLView
memberListXml.stylesheetLocation=/WEB-INF/xsl/memberList.xslt
memberListXml.root=memberInfos

class 는 위에서 만든 view 클레스
stylesheetLocation은 XML을 HTML로 변환하여 보여줄 xslt 의 위치
root 는 XML의 root 엘리먼트 이름을 나타냅니다.

뷰 프로퍼티 파일을 썼다는 것은 ResourceBundleViewResolver를 사용하였다는 것입니다. 기존에 사용하던 리졸버와 상관없이 추가로 등록해 주면 됩니다. 대신 어차피 기본적으로 InternalResourceViewResolver 이 녀석이 Resolver Chaining 할 때 맨 뒤로 가긴 하지만 그래도 명시적으로 order 프로퍼티를 사용하여 순서를 명확히 해줍니다.

    <!-- View Resolver -->
    <!-- XML, Exel, PDF -->
    <bean id="ExViewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
          <property name="basename" value="views"/>
          <property name="order" value="1" />
    </bean>

    <!-- jstl -->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
        <property name="order" value="2" />
    </bean>

4. XSLT 만들기

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="html" omit-xml-declaration="yes"/>

    <xsl:template match="/">
        <html>
            <head><title>AJN Members</title></head>
            <body>
                <h1>전체 회원 목록(XML)</h1>
                <xsl:apply-templates/>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="memberInfo">
        <xsl:value-of select="."/><br/>
    </xsl:template>

</xsl:stylesheet>

<xsl:apply-templates/> 이녀석은 xml 보여줄 곳을 명식하는 것 같고 이 부분에 뿌려줄 내용을 아랫 부분에서 정의해 주는 것 같습니다. 저기서 memberInfo 는 위의 View 클레스 만들 때 사용한 Element의 이름과 동일해야 합니다.

5. 데모

사용자 삽입 이미지
 
사용자 삽입 이미지



'Spring > Chapter 14' 카테고리의 다른 글

Spring에서 Freemarker 사용하기  (2) 2008.02.20
14.6. Document views (Excel)  (0) 2007.05.16
14.6. Document views (PDF)  (0) 2007.05.16
14.5. XSLT  (1) 2007.05.16
14.3. Tiles  (0) 2007.05.15
14. Integrating view technologies  (0) 2007.05.15
top

  1. Favicon of http://timberlandbotases.com BlogIcon timberland shop 2012.12.22 18:21 PERM. MOD/DEL REPLY

    Selon un communiqué de presse de l'organisateur chilien du Dakar-2011, deux hommes travaillant en marge du rallye sont morts à la suite d'accidents au Chili. L'un est décédé jeudi à Copiapo (centre du Chili) où la course se rendra mardi, http://timberlandbotases.com sandalias timberland mujer, lorsqu'une structure métallique soutenant une banderole de bienvenue est tombée sur un cable à haute tension, http://timberlandbotases.com botas timberland. L'autre a été victime d'une décharge électrique mortelle hier à Arica (nord), où la course vient d'arriver, http://timberlandbotases.com timberland españa catalogo. Sport France-Brésil: la liste des Bleus le 3 février Sport JO-2018: Charles Beigbeder président du Comité de candidature d'AnnecyRelated articles:


    http://chingachgook.ru/profile.php?user=cuemurxv&v=comments http://chingachgook.ru/profile.php?user=cuemurxv&v=comments

    http://rrpcompliance.com/forums/topic/by-every-precious-time-i-strive-and-then-reveal-to-folks-in#post-1333886 http://rrpcompliance.com/forums/topic/by-every-precious-time-i-strive-and-then-reveal-to-folks-in#post-1333886

Write a comment.


5. XML 사용하는 초간단 AOP 예제

AOP : 2007.01.09 20:54


초간단 AOP 예제는 이것으로 세개 째군요.
이전에 올렸던 @AspectJ 사용하는 초간단 예제를 XML 설정 파일을 사용하도록 바꿔봤습니다.

다른 파일들은 모두 같고 MannerAOP파일에서 모든 어노테이션들을 띄어 내고 다음과 같이 수정했습니다.

public class MannerAOP {

       public void beforeSaying() {

             System.out.println("다시 소개 합니다~");

       }

 

       public void afterSaying() {

             System.out.println("AOP ~ 줍니다.");

       }

}

그리고 XML 설정 파일에서 저번에는
<aop:aspectj-autoproxy/>
이렇게 한 줄이 있었는데요. 이 것을 지우고 다음과 같이 설정합니다.

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:aop="http://www.springframework.org/schema/aop"

       xsi:schemaLocation="

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

 

       <!-- this is the object that will be proxied by Spring's AOP infrastructure -->

       <bean id="keesun" class="secondSpringAOP.Keesun" />

 

       <!-- this is the actual advice itself -->

       <bean id="manner" class="secondSpringAOP.MannerAOP" />

 

       <aop:config>

             <aop:aspect ref="manner">

 

                    <aop:pointcut id="greeting"

                           expression="execution(public * secondSpringAOP.Human.sayName(..))" />

 

                    <aop:before pointcut-ref="greeting" method="beforeSaying" />

 

                    <aop:after-returning pointcut-ref="greeting" method="afterSaying" />

 

             </aop:aspect>

       </aop:config>

 

</beans>

결과는 다음과 같습니다.

다시 한 번 소개 합니다~
저는 백~기~선입니다.
AOP 죽~여 줍니다.

이 예제를 돌리기 위해서는 이전에 추가했던 spring.jar, commons-logging.jar, aspectjrt.jar, aspectjweaver.jar 이 것들 이 외에 'Spring-with-dependencies 설치 폴더'/lib/asm/ 안에 있는 asm-2.2.2.jar, asm-commons-2.2.2.jar 파일을 classpath에 추가해 주어야 합니다.

top

TAG AOP, SpringAOP, xml

Write a comment.


XML을 EXEL 파일로 바꾸기

Java : 2006.11.08 11:37


XML을 EXEL로 바꿀 수도 있고 그 반대로 EXEL 파일을 XML 파일로 바꿀 수 있는 API를 사용하는 java 코딩을 따라해 볼 수 있습니다.

Javaworld에 올라온 글을 참조하여 따라 해볼 수 있습니다.
URL = http://www.javaworld.com/javaworld/jw-10-2006/jw-1019-xmlexcel.html

jakarta에 있는 POI HSSF API
를 사용합니다.
URL = http://jakarta.apache.org/poi/hssf/index.html

필요한 jar파일은 여기서 직접 다운 할 수도 있습니다.



저번 방학 때 아르바이트로 비주얼 소프트 회사에서 일한 적이 있었는데 그 쪽에서 자체 개발한 class와 비주얼 베이직을 사용해서 DB에 있는 것을 SQL로 긁어와서 EXEL로 뿌려주는 ..일종의 리포트 폼을 만드는 일을 해봤었는데 API가 그냥 제공 되다니... 보면서 신기 했습니다. Jakatra 멋쟁이!

'Java' 카테고리의 다른 글

Java에서 실수 표현 부정확성  (19) 2006.11.15
Java 오픈소스 되다.(GPL 산하의)  (1) 2006.11.13
Null은 객체인가 아닌가? 2  (3) 2006.11.12
Null은 객체인가 아닌가?  (13) 2006.11.12
Reference Object 활용  (2) 2006.11.09
XML을 EXEL 파일로 바꾸기  (0) 2006.11.08
Enumeration & Iterator  (2) 2006.11.07
Auto (un)boxing은 -128~127  (4) 2006.11.07
탬플릿 클레스 만들기  (3) 2006.11.05
local inner class의 예  (0) 2006.11.05
객체지향의 구멍 static  (0) 2006.11.04
top

Write a comment.