Java 在一个控制器方法中设置的模型属性的属性在另一个控制器方法中不可用
下面是我的控制器类中的代码,我使用方法public String getRegistrationFormMap model返回一个带有spring表单的jsp页面,在这个方法中,我在提交表单时设置userTab.setIsMfaEnablednew Booleantrue方法: 公共字符串registerUser@ModelAttributeuserUserTab用户,BindingResult结果,映射模型 作为处理程序方法调用,但在此方法中,前一个方法中设置的用户属性的属性“isMfaEnabled”为null,且行:System.out.printlnuser.getIsMfaEnabled为nul;正在日志中打印。请告诉我这里出了什么问题Java 在一个控制器方法中设置的模型属性的属性在另一个控制器方法中不可用,java,spring,spring-mvc,spring-form,Java,Spring,Spring Mvc,Spring Form,下面是我的控制器类中的代码,我使用方法public String getRegistrationFormMap model返回一个带有spring表单的jsp页面,在这个方法中,我在提交表单时设置userTab.setIsMfaEnablednew Booleantrue方法: 公共字符串registerUser@ModelAttributeuserUserTab用户,BindingResult结果,映射模型 作为处理程序方法调用,但在此方法中,前一个方法中设置的用户属性的属性“isMfaEna
@Controller
@RequestMapping("/register")
public class RegisterUserController {
@Autowired
RegisterUserService registerUserService;
@RequestMapping(value = "/registeruser.action" , method = RequestMethod.POST)
public String registerUser(@ModelAttribute("user") UserTab user , BindingResult results , Map<String,Object> model){
System.out.println("executing regsiterUser ");
if(user == null)
System.out.println(", user is null");
if(results == null)
System.out.println("results is null");
UserTabValiator userTabValidator = new UserTabValiator();
if(user.getIsMfaEnabled() == null)
System.out.println("user.getIsMfaEnabled() is nul");
userTabValidator.validate(user, results);
if(results.hasErrors()){
return "registeruser";
}
try {
boolean val = registerUserService.isExistingUsername(user.getLoginName());
if(val){
System.out.println("username already exists");
model.put("message", "username already exists");
return "registeruser";
}
if(!val){
model.put("username", user.getLoginName());
model.put("message", "registration success ... ");
return "registrationsuccess";
}
} catch (Exception e) {
System.out.println("exception thrown");
e.printStackTrace();
return "errorpage";
}
return "errorpage";
}
@RequestMapping(value="/registeruser.view", method=RequestMethod.GET)
public String getRegistrationForm(Map<String,Object> model){
System.out.println("executing getRegistrationForm");
if(registerUserService == null)
System.out.println("register user service is null");
try{
ArrayList<MfaQuestion> allMfaQuestions = (ArrayList<MfaQuestion>) registerUserService.getAllMfaQuestions();
UserTab userTab = new UserTab();
userTab.setIsMfaEnabled(true);
model.put("user", userTab);
model.put("message", "register new user");
model.put("allMfaQuestions", allMfaQuestions);
return "registeruser";
}
catch(Exception e){
e.printStackTrace();
model.put("user", new UserTab());
model.put("message", "unable to get MFA questions");
return "registeruser";
}
}
}
RegisterUser JSP页面:
<form:form method="POST" action="${pageContext.request.contextPath}/register/registeruser.action" commandName ="user">
<table>
<tr>
<td><form:label path="loginName">UserName</form:label></td>
<td><form:input path="loginName" /></td>
<form:errors path="loginName" cssClass="error"/>
</tr>
<tr>
<td><form:label path="password">Password</form:label></td>
<td><form:input path="password" /></td>
<form:errors path="password" cssClass="error"/>
</tr>
<div id="question1" class="questionblock">
<tr>
<form:select path="userMfaMap.question1" >
<c:forEach items="${allMfaQuestions}" var="mfaQuestion">
<form:option value="${mfaQuestion.mfaQuestionId}">
<c:out value="${mfaQuestion.mfaQuestion}" />
</form:option>
</c:forEach>
</form:select>
</tr>
<tr>
<td><form:label path="userMfaMap.answer1">Answer:</form:label></td>
<td><form:input path="userMfaMap.answer1" /></td>
<form:errors path="userMfaMap.answer1" cssClass="error"/>
</tr>
</div>
<div id="question2" class="questionblock">
<tr>
<form:select path="userMfaMap.question2">
<c:forEach items="${allMfaQuestions}" var="mfaQuestion">
<form:option value="${mfaQuestion.mfaQuestionId}">
<c:out value="${mfaQuestion.mfaQuestion}" />
</form:option>
</c:forEach>
</form:select>
</tr>
<tr>
<td><form:label path="userMfaMap.answer2">Answer:</form:label></td>
<td><form:input path="userMfaMap.answer2" /></td>
<form:errors path="userMfaMap.answer2" cssClass="error"/>
</tr>
</div>
<div id="question3" class="questionblock">
<tr>
<form:select path="userMfaMap.question3">
<c:forEach items="${allMfaQuestions}" var="mfaQuestion">
<form:option value="${mfaQuestion.mfaQuestionId}">
<c:out value="${mfaQuestion.mfaQuestion}" />
</form:option>
</c:forEach>
</form:select>
</tr>
<tr>
<td><form:label path="userMfaMap.answer3">Answer:</form:label></td>
<td><form:input path="userMfaMap.answer3" /></td>
<form:errors path="userMfaMap.answer3" cssClass="error"/>
</tr>
</div>
<tr>
<td><input type="submit" name="submit" value="Submit"></td>
</tr>
</table>
</form:form>
在JSP表单中添加代码以绑定ISMFEABLED的值
<form:input path="isMfaEnabled" />
您好,您可以发布jsp表单代码和UserTab模型对象吗?我已经按照您的要求附上了jsp代码和模型对象类定义。它正在工作,谢谢,我使用了:,还有其他替代方法吗?因为使用隐藏的表单参数很容易受到攻击,因为它在客户端可能会被篡改,还有另一种方法——李尔背离了这一点。您可以在会话范围内设置该属性。因此,在会话作用域中添加ISMFAEEnabled作为一个单独的属性,并在registerUser方法中从会话作用域中获取该值。
<form:input path="isMfaEnabled" />