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

PageLinkActionLinkとして使用しているように見えますが、それが機能するのはどういうわけか奇妙です。

また、このアプローチのもう 1 つの問題は、必要以上にサーバーへのラウンドトリップが 1 回増えることです。

代わりにこれを試してください:

@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 に答える