1

我有一个用户登录的 MVC spring 应用程序,它存储了一个 User @SessionAttribute ,我随后引用它,例如,在 POST 请求中更新 Customer 对象时,我希望将会话用户信息添加到该对象。我的问题是当我在客户 POST 中访问 @ModelAttribute("user") User 对象时,spring 将请求参数绑定到其中,即 User.name 具有来自提交表单的 Customer.name 的值。

注意,我有点破解了这一点,因为所有控制器都是我的 AppController 的子类,这是声明 @SessionAttributes 的地方。但如果是单个控制器,原理是一样的。

那么我可以防止弹簧绑定表单:客户名称值到 User.name 吗?

(我怀疑 webflow 将是一个更合适的框架,但现在没有时间使用它重写)

4

1 回答 1

1

您可以使用以下方法允许或禁止绑定模型属性的某些字段@InitBinder

@InitBinder("user")
public void configureBindingOfUser(WebDataBinder binder) {
    binder.setAllowedFields(); // No fields allowed
}

但是,我认为@SessionAttributes用于存储当前用户或其他类似对象并不是一个好主意。@SessionAttributes 最初旨在维护GETPOST请求之间的表单支持对象的状态,而不是作为访问会话的通用方式。

session也许使用-scoped beans 或自定义参数解析器来访问此类信息会更好。

于 2012-09-26T11:23:23.917 回答