gpt4 book ai didi

java - spring Controller 方法中相同类型的两个对象( session 和非 session )非 session 正在替换 session

转载 作者:太空宇宙 更新时间:2023-11-04 15:15:54 28 4
gpt4 key购买 nike

我在 Spring Controller 中有一个方法,它接受两个相同类型的参数其中一个来自 session ,另一个来自表单提交(UI)。

问题是在 Controller 方法中我的非 session 对象正在替换我的 session 对象。我不确定这是一些错误还是我犯了一些愚蠢的错误。

Spring 版本3.1.2spring mvc/mvc-web 3.1.0

Controller :

@Controller
@RequestMapping("/tspadmin")
@SessionAttributes({"currentUser"})
public class TSPAdminUserController {

@Autowired
private TSPAdminUserService tspAdminUserService;

@RequestMapping(value = "/createUser")
public @ResponseBody Object createUser(User user,@ModelAttribute("currentUser") User currentUser){

//Here user(from UI) object is replacing currentUser
//processing
}
}

我这样做是因为这里一个用户正在创建另一个用户,并且我想在保留之前将某些 session 用户的属性设置为另一个用户。

查看:

    Ext.apply(Ext.form.field.VTypes, {
password: function(val, field) {
if (field.initialPassField) {
var pwd = field.up('form').down('#' + field.initialPassField);
return (val == pwd.getValue());
}
return true;
},

passwordText: 'Passwords does not not match'
});


var create_user = Ext.create('Ext.form.Panel', {
extend:'Ext.form.Formpanel',
autoScroll: true,
title: 'Create User',

border:false,
layout: {
type: 'hbox',
align: 'stretch'
},
renderTo: document.body,
items : [ {
xtype : 'panel',
border : false,
margin : '20 20 20 20',
width : '40%',
defaults : {

width : 300

},

items : [
//comboboxs.tspNameCombo,

{
xtype : 'textfield',
allowBlank : false,
fieldLabel : 'User Name',
name : 'userName',
width : 350,
},
{
xtype:'textfield',
fieldLabel: 'Password',
name: 'password',
inputType: 'password',
regex: /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/,
regexText: "<b>Error</b></br>Password should be of minimum 8 character length, it should be alphanumeric ,must contain at least one special character,one Upper case letter.",
validator: function(v) {
return /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/.test(v)?true:"Invalid Number";
},
id: 'pass'
},
{
xtype:'textfield',
fieldLabel: 'Confirm Password',
name: 'confirmPassword',
vtype: 'password',
inputType: 'password',
initialPassField: 'pass' // id of the initial password field
},
{
xtype : 'textfield',
allowBlank : false,
fieldLabel : 'Email',
name : 'email',
vtype : 'email',
width : 350,

}, {
xtype:"textfield",
allowBlank : true,
regex: /^[0-9\+\-_]+$/,
fieldLabel: 'Telephone Number',
name: 'telephone1',
regexText: "<b>Error</b></br>Invalid Number entered.",
validator: function(v) {
return /^[0-9\+\-_]+$/.test(v)?true:"Invalid Number";
}
},

{
xtype:"textfield",
allowBlank : false,
regex: /^[0-9\+\-_]+$/,
fieldLabel: 'Mobile Number',
name: 'telephone2',
regexText: "<b>Error</b></br>Invalid Number entered.",
validator: function(v) {
return /^[0-9\+\-_]+$/.test(v)?true:"Invalid Number";
}
},
]
}],
buttonAlign:'left',
buttons: [{
text: 'Save',
margin : '20 20 20 20',
handler: function () {
var form = create_user.getForm();
form.submit({
url:'tspadmin/createUser',
success : function(form, action) {
Ext.Msg.alert('Success',action.result.message,function(){
location.reload();
});
},
failure : function(form, action) {
Ext.Msg.alert('Failure',action.result.message);
}

});
}
}, {
text: 'Cancel',
margin:'20 20 20 20',
handler: function() {
this.up('form').getForm().reset();
}
},

]


});

最佳答案

来自文档SessionAttributes:“这通常会列出模型属性的名称,这些属性应该透明地存储在 session 或某些 session 存储中,用作表单支持 bean”你的代码工作正常,你只是使用了错误的东西。

看看这个:http://www.intertech.com/Blog/understanding-spring-mvc-model-and-session-attributes/

如果您想存储并从 session 中获取用户:1)创建保存用户信息的 session bean并将其注入(inject) Controller (使用aop:scoped-proxy)2) 将 User 直接存储在 session 中,并在 Controller 方法中添加 HttpSession 参数。3)Spring Security有一些实用程序来存储登录的用户

关于java - spring Controller 方法中相同类型的两个对象( session 和非 session )非 session 正在替换 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20857020/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com