2

假设我有一个Grid带有一些链接来编辑一个Entity. 这是我的.tml文件

<table t:id="personGrid">
    <!-- ... -->
    <p:editCell>
        <p t:id="edit">${person.lastName}</p>
    </p:editCell>
    <!-- ... -->
</table>

在我的.java文件中,我有这个:

@Component(parameters = {"context=person.employeeNumber", "page=person/PersonPage"})
private PageLink edit;

这很简洁,我不必编写很多样板代码。这里的陷阱是如果我重构或者employeeNumber重构PersonPage. 它不再起作用,最糟糕的是我不会收到错误消息。

我发现我可以PageRenderLinkSource像这样使用:

@Inject
private PageRenderLinkSource editPersonLink;
// ...
Object onActionFromEdit(String employeeNumber)
{
    return editPersonLink.createPageRenderLinkWithContext(PersonPage.class, employeeNumber);
}

这是相当不错的。它没有更多的样板,但它是可重构的。

我的问题是我仍然必须保持

@Component(parameters = {"context=person.employeeNumber", "page=PersonPage"})
private PageLink edit;

在我的.java文件中,否则 Tapestry 会抱怨缺少@Component.

所以我的问题是,如何在没有样板的情况下实现一些防重构的参数化页面链接?

我正在使用 Tapestry 5.3.6。

4

1 回答 1

1

看起来您正在使用PageLink作为ActionLink并且它的工作原理有点奇怪。

此外,这种方法的另一个问题是,您最终到服务器的往返次数比您需要的要多。

试试这个:

@Inject
private PageRenderLinkSource renderLinkSource;

public Link getEditLink() {
    return renderLinkSource.createPageRenderLinkWithContext(PersonPage.class, person.getEmployeeNumber());
}

进而:

<a href="${editLink}">${person.lastName}</a>

顺便说一句,这假设您的网格中有“ row=person”

于 2013-01-25T21:37:32.300 回答