如何将当前循环值传递给Tapestry中的类方法?

ior*_*vic 0 loops if-statement tapestry parameter-passing argument-passing

我想动态显示页面链接的可用菜单,具体取决于使用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>
Run Code Online (Sandbox Code Playgroud)

在我的Layout.java我有一个以下方法:

public boolean isUserAllowedOnPage(String pageName) {
    // My logic here, returns either true or false
}
Run Code Online (Sandbox Code Playgroud)

问题是,我不知道如何实际的网页名称参数传递给isUserAllowedOnPage(String pageName)方法,因为下面的一行tml代码,
"isUserAllowedOnPage('pageName')" 我传递的实际字符串,"pageName"而不是期望的值之一(例如"Index","About","Contacts"...).

lan*_*ava 6

你的循环指定value="pageName"哪个意味着tapestry pageName每次迭代循环时都会更新页面中的属性.因此,您不需要将它传递给方法,因为每次调用方法时都已设置它.您可以执行以下操作:

TML

<t:loop source="pageNames" value="pageName">
    <t:if t:test="userAllowedOnPage">
        ...
    </t:if>
</t:loop>
Run Code Online (Sandbox Code Playgroud)

Java的

@Property
private List<String> pageNames;

@Property
private String pageName;
...
public boolean isUserAllowedOnPage() {
    // some calculation based on pageName
}
Run Code Online (Sandbox Code Playgroud)