0

Tapestry를 사용하여 로그인 한 사용자 유형에 따라 페이지에 대한 링크 메뉴를 동적으로 표시하고 싶습니다. Layout.tml에서 내 코드의Tapestry의 클래스 메소드에 현재 루프 값을 전달하는 방법은 무엇입니까?

일부는 다음과 같습니다

에서
<div class="header"> 
     <t:if t:test="userLoggedIn"> 
     <div class="menu"> 
      <ul> 
       <t:loop t:type="loop" source="pageNames" value="pageName" class="prop:classForPageName"> 
        <t:if t:test="isUserAllowedOnPage('pageName')"> 
         <li> 
          <t:pagelink page="prop:pageName.name">${pageName.displayName}</t:pagelink> 
         </li> 
        </t:if> 
       </t:loop> 
      </ul> 
     </div> 
     </t:if> 
     <div style="clear:both;"></div> 
    </div> 

Layout.java I하기의 방법이 있습니다

public boolean isUserAllowedOnPage(String pageName) { 
    // My logic here, returns either true or false 
} 

문제는, 내가 실제를 전달하는 방법을 모르겠어요 페이지 이름 매개 변수를 isUserAllowedOnPage(String pageName) 방법으로 변경하십시오. 다음 줄의 tml 코드
"isUserAllowedOnPage('pageName')" 실제 문자열 인원하는 값 (예 : "Index", "About", "Contacts" ...) 대신이 필요합니다.

답변

6

pageName 속성을 루프를 반복 할 때마다 메서드를 호출 할 때마다 이미 설정되어 있으므로 메서드에 전달할 필요가 없습니다. 당신은 다음을 수행 할 수 : 나는 그것이 가장 좋은 방법이 될 수 없습니다 알고,하지만 난에 외부 루프에서 현재 반복 값을 원하는

TML

<t:loop source="pageNames" value="pageName"> 
    <t:if t:test="userAllowedOnPage"> 
     ... 
    </t:if> 
</t:loop> 

자바

@Property 
private List<String> pageNames; 

@Property 
private String pageName; 
... 
public boolean isUserAllowedOnPage() { 
    // some calculation based on pageName 
} 
2

당신은 자바 코드에서이 표현 쓰기 것처럼 당신은 따옴표없이 메서드에 값을 전달할 수 있습니다

<t:if t:test="isUserAllowedOnPage(pageName)"> 
</t:if> 

또는를 :

태피스트리가 업데이트된다는 것을 의미합니다 귀하의 루프가 value="pageName"를 지정
<t:if t:test="isUserAllowedOnPage(getPageName())"> 
</t:if> 
+0

을 내 'Layout # getPageName()'메소드가 아니라'Layout.tml'을 사용합니다. – Lopina

+1

구성 요소 템플릿에는 값이 없으며 단지보기에 불과합니다. 모든 값은 Java 클래스에 저장됩니다. 따라서' sody

관련 문제