模型中的字符串参数化不起作用



我试图参数化一个字符串,并将该字符串设置为模型的结果:

SomePanel.java

public SomePanel( String id, IModel<Person> personModel)
{
tallLabel = new Label( "height", new LoadableDetachableModel() {
pubic String load() {
Person person = personModel.getObject();
boolean isTall = apiCallToCheckIfTall( person );
// 'name' is a property on PersonModel
String name = person.getName();
String tallString = MessageFormat.format(getString("Tall.Label"), name );
String shortString = MessageFormat.format(getString("Short.Label"), name );

return isTall ? tallString : shortString;
}
});
add(tallLabel);
}

文本属性

Tall.Label = ${name} is tall.
Short.Label = ${name} is short.

我尝试实现一个解决方案,但contact.getName()产生了一个错误。我的理解是personModel.getObject()会给我实际的对象(它定义了gettergetName(,所以不确定为什么会产生错误。

MessageFormat使用索引参数,因此您可能混淆了一些技术。

以下是使用Wicket的带有名称参数的资源消息的最简单解决方案:

return getString(isTall ? "Tall.Label" : "Short.Label", personModel)

我设法让它与一起工作

SomePanel.java

public SomePanel( String id, IModel<Person> personModel)
{
tallLabel = new Label( "height", new LoadableDetachableModel() {
public String load() {
Person person = personModel.getObject();
boolean isTall = apiCallToCheckIfTall( person );
PersonGetter getter = new PersonGetter ( personModel );
String name = getter.getName();
String RTStringModel = MessageFormat.format( getString("Tall.Label"), person.getName() );
String StringModel = MessageFormat.format( getString("Short.Label"), person.getName() );

return isTall ? RTStringModel : StringModel;
}
});
add(tallLabel);
}
...
private class NameGetter implements Serializable
{
private final IModel<Person> model;
public NameGetter( final IModel<Person> personModel )
{
this.model = person;
}
public String getName()
{
return getFormattedLegalName( this.model.getObject() );
}
}
public static final String getFormattedLegalName( Person person )
{
if ( person == null )
{
return "";
}
else
{
return person.getName();
}
}

文本属性

Tall.Label = {0} is tall.
Short.Label = {0} is short.

不过,这似乎有点太多了,无法从模型中提取值。我无法直接从personModel(例如personModel.getObject().getName()(中获得名称,因此不得不创建另一个类。

最新更新