2013-05-22 165 views
0

在Wicket中,是否有可能將一個屬性的值引用另一個屬性?例如,如果我有像<entry key="site.name">My Site</entry>這樣的屬性,有沒有辦法讓另一個屬性在其值中使用值site.name參考另一個屬性?

我嘗試使用類似<entry key="page.title">About ${site.name}</entry>之類的東西,但Wicket會拋出異常,因爲它試圖將site.name作爲模型的屬性...這很有道理。但是有沒有另一種語法允許一個屬性引用另一個屬性的值?

我正在運行Wicket 6.6。

+1

有你有看看Wicket國際化頁面? https://cwiki.apache.org/WICKET/everything-about-wicket-internationalization.html – drobson

+0

是的,我有。你有什麼更具體的指出?我在i18n頁面上看到的最接近的例子是關於將被應用到具有嵌套組件的組件的屬性(其可能使用它們自己的屬性)。我沒有看到的是一個屬性直接引用另一個屬性的例子,這是我的問題在問什麼。我認爲這是不可能的,但Wicket有時會讓人感到意外,並且模糊不清,記錄不完善的功能。我只是在你引用的頁面上丟失了什麼? – spaaarky21

+0

你試過用屬性文件嗎?我從來沒有親自使用Entry Keys,但在這種情況下,我會使用屬性文件。屬性文件允許您在創建新屬性時引用其他定義的屬性。 – drobson

回答

1

要回答我的問題,在代碼中的快速峯值顯示,使用java.util.Properties,它只是用於解析鍵 - 值對流檢票負載性能。它不會像開發人員根據他們在像ANT這樣的工具方面的經驗所預期的方式進行任何屬性擴展/替換。

Properties還有其他替代方案,如Apache Commons Configuration,它們執行擴展,但Properties沒有。因此,Wicket也不會 - 它只是在寫入時加載屬性。 Wicket唯一替代的功能是模型屬性當頁面被渲染時,不屬於屬性文件中的「屬性文件」這個詞。

0

看看Wicket的 StringResourceModel

例如,在DOC: label.greetings=Welcome, ${name}!new Label("greetings", new StringResourceModel("label.greetings", this, new Model(user)));

+0

是的,這允許替換,但它的問題脫離主題。您可以使用StringResourceModel來解析一個屬性並替換另一個屬性的值。但是,該解決方案將要求您在Java中執行此操作,並且不適用於使用wicket:message元素或屬性直接在標記中引用屬性的情況。問題是關於在屬性文件本身中更靜態地進行替換。 – spaaarky21

+0

對不起,我誤解了你的問題。我只能爲特殊情況考慮解決方案,就像上面提到的wicket:message標籤。在這種情況下,您可以實現您自己的IComponentResolver,這裏是一個示例:http://pastebin.com/XazVtF1p – mrak

+0

正如您所提到的,該解決方案僅適用於您可以使用正在處理的新自定義標記的情況。它不適用於其他任何地方引用的屬性(例如,wicket:消息元素,wicket:消息標記或StringResourceModels。)但我必須說這是一個很好的解決方案。 :)感謝發佈。 – spaaarky21

0

您可以編寫自己的ResourceModel替換鍵: http://pastebin.com/38WB2XDF

的ReplacingResourceModel將可用/可在:

<dependency> 
    <groupId>org.wicketstuff</groupId> 
    <artifactId>wicketstuff-minis</artifactId> 
    <version>7.0.0-M6</version> 
</dependency> 

<dependency> 
    <groupId>org.wicketstuff</groupId> 
    <artifactId>wicketstuff-minis</artifactId> 
    <version>6.20.0</version> 
</dependency>