【发布时间】:2011-06-07 18:22:16
【问题描述】:
是否可以使用#evaluate 动态访问属性?我提前为篇幅道歉,但其中大部分只是示例代码,以充分说明我的问题。
我有一个如下所示的首选项类:
public class DefaultUserPreferences implements Preferences {
//Getters and setters left off for "brevity…"
private Panel defaultPanel;
private OrderByColumn mostActiveSortOrder;
private OrderByColumn recentlyModifiedAccountsSortColumn;
}
这些类型中的每一个都只是一个自定义枚举。
public enum OrderByColumn {
NAME,
LAST_ACTIVITY,
GROUP
}
public enum Panel {
MOST_ACTIVE,
RECENTLY_MODIFIED;
public String getCamelCase() {
String[] words = StringUtils.split(this.name(), "_");
String rval = StringUtils.EMPTY;
if (words != null && words.length >= 1) {
rval = StringUtils.lowerCase(words[0]);
for(int i = 1; I < words.length; i++) {
rval += StringUtils.capitalize(words[i].toLowerCase());
}
}
return rval;
}
}
下面是我希望如何向用户显示首选项的 sn-p,但我似乎无法调用 getter(如果我评估它以获取文本,我会得到以下信息:test .core.model.entities.DefaultUserPreferences@596fde80.mostActiveSortOrder)
#for ($panel in $Panels)
## The names here are correct
#set($selectName = ${panel.CamelCase}SortColumn)
#set($dynamicProperty = $preferences.$selectName)
<tr>
<td>$panel</td>
<td>
<select name="$selectName">
#for($option in $OrderByColumn)
<option value="$option" #if($option == #evaluate($dynamicProperty) selected="selected" #end>$option</option>
#end
</td>
</tr>
#end
但是我的吸气剂似乎从来没有被偏好调用过。我已经将每个部分都添加到了上下文中,并且在迭代面板时没有任何问题,我似乎无法理解语法来动态调用属性上的 getter。这在 1.7 中可以吗?
【问题讨论】: