该
name是模型的财产,也是动作类的属性。该
modelDriven拦截器推值堆顶部的模型,所以很容易在JSP中使用它。动作对象位于模型下方。因此,可以使用
[1]前缀直接引用它。请参阅OGNL基础。
但是,如果模型和操作对象中没有重复的属性名称,则没有必要。当名称
name由OGNL评估时,它将从值堆栈的顶部搜索到堆栈的下方,以查找属性访问器。找到的第一个访问器将被执行。因此,模型属性具有优先级,因为模型位于值堆栈的顶部。
如果
name应在操作中设置具有名称的属性,则可以直接将该属性命名为
[1].name。但是,
params拦截器的默认模式不接受此类参数名称。但是,它是有效的OGNL表达式。因此,要使其通过拦截器,您需要将其添加到已接受参数名称的模式中。像那样
@Action(value="modelDrivenResult", results=@Result(location = "/modelDriven/modelDrivenResult.jsp"), interceptorRefs = @InterceptorRef(value="defaultStack", params={ "params.acceptParamNames", "(\[\d+\]\.)*\w+((\.\w+)|(\[\d+\])|(\(\d+\))|(\['\w+'\])|(\('\w+'\)))*" }))这是因为OGNL还会检查接受参数的模式,并且此正则表达式模式允许同时匹配
paramsOGNL匹配器。



