반응형

Go to start of metadata

동적 태그 라이브러리

Grails는 JSP와 GSP에서 사용할 수 있는 다양한 종류의 커스텀 태그를 내장하고 있지만(태그 라이브러리 래퍼런스 를 참고하세요), Grails의 간결한 동적 태그 라이브러리 메커니즘을 이용하면 개발자가 직접 단순 커스텀 태그(simple custom tags), 논리 커스텀 태그(logical custom tags), 반복 커스텀 태그(iterative custom tags)를 만들 수도 있습니다.

Grails 태그는 추가적인 설정이 필요 없고, TLD를 갱신할 필요도 없으며, 서버 재시작 없이 런타임에 자동으로 리로드 된다는 장점을 갖습니다. 이러한 특성 덕에 개발자들은 마치 뷰의 다른 부분들을 개발하는 것 처럼 점진적으로 유용성을 높여가며 태그를 개발할 수 있습니다.

경고

Icon

Grails 태그 라이브러리를 JSP에서 사용하려면 약간의 추가적인 작업이 필요합니다. Grails 태그 라이브러리는 동적이라는 특성으로 인해 JSP 보다는 GSP와 더 잘 연동됩니다. Grails 태그 라이브러리를 JSP에서 사용하는 방법을 알아보려면 마지막 섹션을 참고하세요.

단순 태그(Simple tags)

새 태그를 만들려면 "grails-app/taglib/ApplicationTagLib.groovy" 파일을 열어서 수정하거나, 이름이 "TagLib"로 끝나는 새 클래스를 만들어야 합니다. 단순 태그를 만들려면 클래스에 하나의 인자를 갖는 새로운 클로저 속성을 추가하면 됩니다. 이 인자는 태그의 속성 집합입니다:

def includeJs = { attrs ->
    out << "<script xsrc='scripts/${attrs['script']}.js' />"
}

이 태그를 GSP 페이지에서 호출하려면 "g" 접두사를 붙여서 태그 속성 이름을 적어주면 됩니다:

<g:includeJs script="myscript" />

논리 태그(Logical tags)

논리 태그를 만들려면 두 개의 인자를 갖는 클로저 속성을 추가해야 합니다. 첫 번째 인자는 태그의 속성 집합이고, 두 번째 인자는 태그의 본문(body)이며 인자 자체가 또 다른 클로저 입니다.

def isAdmin = { attrs, body ->
     def user = attrs['user']
     if(user != null && checkUserPrivs(user)) {
           body()
     }
}

위 태그는 사용자가 관리자(administrator)인지 판별한 후, 관리자인 경우에만 태그의 본문을 호출합니다:

<g:isAdmin user="${myUser}">
    // 관리자만 볼 수 있는 제한된 컨텐츠.
</g:isAdmin>

반복 태그(Iterative tags)

반복 태그를 만드는 것 또한 가능합니다:

def repeat = { attrs, body ->
    def i = Integer.valueOf( attrs["times"] )
    def current = 0
    i.times {
           body( ++current ) // 현재 반복 횟수(current)를 Groovy의 기본 인자인 "it"으로 넘김
    }
}

반복 태그를 호출하려면 아래와 같이 하면 됩니다:

<g:repeat times="3">
<p>3회 반복! 현재 반복 횟수 = ${it}</p>
</g:repeat>

태그를 이용하여 마크업 만들기

Grails는 태그를 이용하여 마크업을 만들 수 있도록 도와주는 특별한 메서드를 제공합니다. 마크업을 만드는 것은 태그의 일반적인 활용 사례 중 하나입니다. 마크업을 만들려면 'mkp' 메서드를 호출하면서 화면에 출력하고자 하는 마크업들과 함께 클러저를 전달해주면 됩니다:

def dialog = { attrs, body ->
      mkp {
          div('class':'dialog') {
              body()
          }
      }
}

GSP 태그를 메서드로써 호출하기

GSP 태그들은 GSP 페이지 안의 Groovy 표현식으로 사용될 수도 있습니다. 예를 들어 hasErrors 태그는 다음과 같이 평범한 태그로 쓰일수도 있고:

<g:hasErrors bean="${book}" field="title">
<span class='label error'>There were errors on the book title</span>
</g:hasErrors>

아래처럼 메서드로써 호출될 수도 있습니다:

<span id="title" class="label ${hasErrors(bean:book,field:'title','errors')}">Title</span>

메서드의 마지막 인자는 태그의 본문(body)으로 취급됩니다. 또는 아래와 같이 문자열을 반환하는 클로저를 넘겨도 됩니다:

<%=
hasErrors(bean:book,field:'title') {
'errors'
} %>

JSP에서 Grails 태그 라이브러리 사용하기

JSP에서 Grails 태그 라이브러리를 쓰려면 JSP의 "invokeTag" 태그를 이용하며 Grails의 태그 라이브러리를 호출해주면 됩니다.

<g:invokeTag name="includeJs" script="myscript" />
<g:invokeTag name="isAdmin" user="${myUser}">
    // some restricted content
</g:invokeTag >
<g:invokeTag name="repeat" times="3">
<p>Repeat this 3 times! Current repeat = <c:out value="${it}" /></p>
</g:invokeTag>

만약, Grails 태그를 다른 평범한 JSP 태그처럼 사용하려면 아래 단계를 수행해야 합니다:

1) Grails의 org.codehaus.groovy.grails.web.taglib.jsp.JspInvokeGrailsTagLibTag 클래스를 상속받는 자바 클래스를 생성하고 생성자에서 "setName()" 메서드를 호출하여 여러분의 태그 이름을 전달해줍니다:

package com.mycompany.taglib;
public class IncludeJsTag extends JspInvokeGrailsTagLibTag {
   public static final String TAG_NAME = "includeJs";
   public IncludeJsTag() {
       super.setName(TAG_NAME);
   }
}

2) JSP에서는 각각의 태그에 대해 선언적 태그 라이브러리 정의(TLD)가 존재해야 합니다. 따라서 "web-app/WEB-INF/tld/grails.tld" 파일을 수정하여 여러분의 클래스를 지칭하는 적절한 엔트리를 추가해주어야 합니다:

<tag>
        <name>includeJs</name>
        <tag-class>com.mycompany.taglib.IncludeJsTag</tag-class>
        <body-content>JSP</body-content>
        <variable>
            <name-given>it</name-given>
            <variable-class>java.lang.Object</variable-class>
            <declare>true</declare>
            <scope>AT_BEGIN</scope>
        </variable>
        <dynamic-attributes>true</dynamic-attributes>
    </tag>

3) 이제 Grails 태그를 다른 평범한 JSP 태그처럼 호출할 수 있습니다:

<g:includeJs script="myscript" />

출처 : http://docs.codehaus.org/display/grails/korean+dynamic+tag+libraries

반응형
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

Tomcat 서버에 특정 ip 만 접근 할 수 있게 설정하기

1. Tomcat 설치 위치에 conf 폴더 내의 context.xml 파일을 메모장 같은 Editor 로 연다 ( 편집하기 전에 미리 백업을 해두자 )
- Windows 경우 Default 설치 경로 : C:\Program Files\Apache Software Foundation\Tomcat 6.0
- Linux 의 경우 : /usr/local/tomcat

2. context.xml 파일의 맨 끝부분에 다음의 내용이 반드시 있는지 확인 한다
- <WatchedResource>WEB-INF/web.xml</WatchedResource>



3. </WatchedResource> 태그 다음 라인에 아래의 내용을 추가 한다. allow 항목에 허용하고 싶은 ip 를 넣는다. ip 가 여러개 일경우 192.168.1.22|192.168.1.33 과 같이 넣고 저장 한다
- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="IP1|IP2|IP3"/>

4. Tomcat 을 다시 시작 한다
- Windows 경우 : Trayicon 영역에서 tomcat 아이콘을 찾아 마우스 오른쪽 마우스 클릭하여 Stop Service 후 Start Service 하면 된다
- Linux 의 경우 : /etc/init.d/tomcat restart 하면 된다

[ 주의 ]
- Tomcat 의 각종 설정 파일들 안에 한글 주석을 달 경우 주의 해야 한다. 각종 *.xml 파일들이 Tomcat 이 Start 할 때 Parse 되는데 이때 한글 주석을 만나면 Error 가 발생하며, Tomcat Service 는 올라 왔지만, 메인 Servlet 이 Load 실패 하기 때문에 해당 웹 페이지가 열리지 않는다.
어쩔 수 없이 한글 주석을 달아야 한다면, 해당 *.xml 파일의 맨 상단의 encoding='utf-8' 부분을 encoding='eucKR' 로 변경하고, Tomcat 을 재시작하면 된다


반응형

'코드자료실' 카테고리의 다른 글

[secmon] 상태값  (0) 2017.08.28
[grails] 동적 태그 라이브러리  (1) 2014.12.09
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,