【问题标题】:Velocity Dynamic Property Access速度动态属性访问
【发布时间】: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 中可以吗?

【问题讨论】:

    标签: java velocity


    【解决方案1】:

    从邮件列表中收到这个。基本上评估只返回一个字符串来显示而不是返回一个值。因此,在评估字符串内部需要 set 指令。

    #set($selectName = "${panel.CamelCase}SortColumn")
    #set($dynamicProp = '#set( $selectedPreference = ' + '$preferences.' + $selectName)  + ' )')
    #evaluate($dynamicProp)
    

    运行这些行后,我可以检查 selectedPreference 的值与我正在迭代的值。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2013-07-12
    • 2011-08-10
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    相关资源
    最近更新 更多