2014-10-14 3 views
0

나는 값이 어디에 내가 가진 개체의 종류에 따라 달라집니다 html로 출력해야합니다 (나는 DB 표현 사이에 전환 해요). 지금은 g:if 표현의 블록에 내 논리가 있습니다. 읽고 디버깅하기가 상대적으로 어렵습니다.GSP의 일반 도우미 메서드에서 변수를 설정하려면 어떻게해야합니까?

<g:if test="${o.isKindA}"> 
    <g:set var="x" value="${...}" /> 
    <g:set var="y" value="${...}" /> 
    ... 
</g:if> 
<g:else> 
    <g:set var="x" value="${...}" /> 
    <g:set var="y" value="${...}" /> 
    ... 
</g:else> 

나는 o의 방법으로이 값 X와 Y를 추가 특히 관심이없는입니다. 그러나, 이것은 실패

// Tag Helper 
// 
class AmazingTagLib { 
    def valueXFor = { attrs -> o.isKindA? 1 : 2 } 
    ... 
} 

// The previous GSP, rewritten 
// 
... 
<g:set var="x" value="${ valueXFor(o) }" /> 

: 내가 뭘하려는 것은 내가 Grails의에서 "태그 lib 디렉토리를"== 이해 뷰 도우미를 사용하여 설정됩니다. x을 사용하려고 시도하면 빈 StreamCharBuffer에 바인딩됩니다. 이는 에 의 구현을 첨부하지 않았기 때문일 수 있습니다. 그것은 내 도우미의 정수 값을 반환해야합니다.

필자의 시각에서 이러한 헬퍼 메소드를 어떻게 사용할 수 있습니까?

+0

보십시오 당신이 당신의 태그 라이브러리에있는 당신의 방법을 정의하기 직전에이 추가 :'정적 returnObjectForTags의 = [ 'valueXFor를']' –

+0

을 수행 OMG, @JoshuaMoore! 답변을 제출하십시오! 당신은 제 동료들의 수십 점을 얻으 려합니다. –

+0

기꺼이 도와 드리겠습니다. (: –

답변

1

기본적으로 태그 라이브러리는 out으로 렌더링하는 데 사용됩니다. 이 경우 메서드에서 객체/값을 반환하려는 경우 TagLib에이 메서드가 표준 동작과 다른 것으로 알려야합니다. 다음을 추가하면 트릭을 할 것입니다 :

class AmazingTagLib { 
    static returnObjectForTags = ['valueXFor'] 
    def valueXFor = { attrs -> o.isKindA? 1 : 2 } 
    ... 
} 
관련 문제