我什么时候可以在Wicket Ajax TabbedPanel中使用getString()?

时间:2016-06-27 17:19:04

标签: java jquery ajax wicket

我对Wicket 7.3和JQuery 2.1.4有以下问题:

在动态选项卡式面板中(添加和删除选项卡),我想本地化选项卡标题并添加工具提示。我的代码

JQueryGenericPanel() {
....
  populateItem( ListItem<ITab> item) {
    getString();

在日志文件中产生警告:

  

尝试检索尚未添加到页面的组件的本地化字符串。这有时会导致返回无效或没有本地化资源。确保您没有在Component的构造函数

中调用Component#getString()

在方法

中的面板(位于选项卡上)中使用getString()
onInitialize()

不起作用,因为为时已晚。标签已设置为“懒惰”。

是否有其他方法类似于“populateItem()”我可以使用?

**附录** 选项卡式面板的代码为:

public class MyTabbedPanel extends JQueryGenericPanel<List<ITab>> implements ITabsListener {
  ...
  @Override
  protected void onInitialize() {
    super.onInitialize();

    this.add( new ListView<ITab>( "tabs", this.getModel() ) {
      ...
      @Override
      protected void populateItem( ListItem<ITab> item ) {
        Label link = new Label( "widgetId", new PropertyModel<String>( somePanel, "getTitle()" ) );

面板中的代码是:

private String title = "default";
public String getTitle() { return title; }
@Override
public void onInitialize() {
    title = getString( "someKey" );
}

因此PropertyModel使用'getTitle()'获取标题。不幸的是,在调用'onInitialize()'之前会发生这种情况。因此标签标题显示“默认”而不是“someKey”的本地化文本。

1 个答案:

答案 0 :(得分:0)

而不是

new Label(itemId, getString("key"))

...使用:

new Label(itemId, new ResourceModel("key"));

...或者如果你喜欢用字符串做的事情:

new Label(itemId, new AbstractReadOnlyModel<String>() {
  public String getObject() {
    return ... + getString("key") + ...;
  }
});