当我使用'commandName'属性和spring security时,我没有从前端获得选定的下拉值,因为当我在控制器中获取它时,LoginModel字段(strLogintype,strUserType)变为'null'。
但是当我不使用spring security时,相同的代码可以正常工作。我确实尝试了link1和link2中提到的解决方案,但它在我的情况下不起作用。
我的登录 JSP 代码是这样的:
<script>
$(document).ready(function() {
$type = $("select[id='userType']");
$page = $("select[id='signInPage']");
$("<option>Account Summary</option>").appendTo($page);
$("<option>Basket Order</option>").appendTo($page);
$("<option>Portfolio</option>").appendTo($page);
$type.change(function() {
...
});
});
</script>
<c:set var = "url" value = "/j_spring_security_check" />
<form:form method="post" commandName="portalLogin" action="${pageContext.servletContext.contextPath}${url}" name="f">
<form:select path ="strUserType" style="font-family: tahoma;font-style: normal;font-size: 11px;" id="userType">
<form:option value="retail" selected="selected">Retail</form:option>
<form:option value="admin">Admin</form:option>
</form:select>
<div class="left"><spring:message code="label.startIn" /></div>
<form:select path="strLogintype" style="font-family: tahoma;font-style: normal;font-size: 11px;" id="signInPage" > </form:select>
我的控制器代码是这样的:
@RequestMapping("/signIn")
public ModelAndView onClickLogin(
@ModelAttribute("portalLogin") LoginModel loginModel, Model model,HttpServletRequest request) {
strLoginPg = loginModel.getStrLogintype();
if (strLoginPg != null && strLoginPg.equals("Basket Order")) {
return new ModelAndView("redirect:BasketOrders.html");
} else if (strLoginPg != null && strLoginPg.equals("Portfolio")) {
return new ModelAndView("redirect:portfolio.html");
} else if (strLoginPg != null && strLoginPg.equals("Account Summary")) {
return new ModelAndView("redirect:accountSummary.html");
} else if (strLoginPg != null && strLoginPg.equals("General Settings")) {
return new ModelAndView("redirect:settings.html");
} else{
return new ModelAndView("redirect:adminConfig.html");
}}
[更新]:我尝试了两种方法:
我创建了自定义 authenticationsuccesshandler.LoginController 与它相同。当我运行应用程序时,我看到 CustomSimpleURLAuthenticationSuccessHandler 被触发,但在这里我再次没有从控制器的前端获取选定的下拉值,而是它为 null。因为这个我登陆不同的页面(adminConfig)。
第二种方式:
我恢复到我之前的代码。我只是将@RequestParam 属性用于 LoginController 的“onClickLogin”方法。
@RequestMapping("/signIn")
public ModelAndView onClickLogin(
@ModelAttribute("portalLogin") LoginModel loginModel, @RequestParam("strLogintype") String strtype, Model model,HttpServletRequest request) {
jsp页面:
<form:select path="strLogintype" name="strLogintype" style="font-family: tahoma;font-style: normal;font-size: 11px;" id="strLogintype" >
但我收到以下错误“HTTP 状态 400 - 所需的字符串参数 'strLogintype' 不存在”。它还说“客户端发送的请求在语法上不正确”。这里出了什么问题?此外,@RequestParam 是否用于在 jsp 页面中获取“选定”下拉值。
一旦控制进入 Spring Security 并且当它调用控制器时,我如何保留选定的下拉值?