0

Tapestry を使用してログインしているユーザーのタイプに応じて、ページへのリンクの利用可能なメニューを動的に表示したいと考えています。

私のコードの一部はLayout.tml次のようになります。

    <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には次の方法があります:

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

isUserAllowedOnPage(String pageName)問題は、実際のページ名パラメーターをメソッドに渡す方法がわからないことです。次のtmlコード行では、目的の値の 1 つ (たとえば、、、...) の代わりに実際の
"isUserAllowedOnPage('pageName')" 文字列を渡すためです。"pageName""Index""About""Contacts"

4

2 に答える 2

6

ループは、タペストリーがループを反復するたびにページ内value="pageName"のプロパティを更新することを意味します。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
}
于 2013-07-31T08:06:50.333 に答える
2

この式を Java コードで記述した場合と同様に、引用符なしでメソッドに値を渡すことができます。

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

または:

<t:if t:test="isUserAllowedOnPage(getPageName())">
</t:if>
于 2013-07-31T07:02:15.583 に答える