基本上,我有一个控制器和两种不同的帐户类型。我希望将视图显示为“adminDashboard.jsp”或“userDashboard.jsp”,具体取决于用户的类型,并将名为“user”的模型属性传递给每个视图,但是具有不同类别的不同对象在哪个视图上显示。目前,即使它被埋在一个开关盒中,我的代码只会读取先发生者,而不是任何一个属于“激活”开关。
HomeController中:
@Controller
@RequestMapping(value = "/dashboard")
public ModelAndView showDashboard(String userGroup) {
switch(userGroup) {
case "admin": {
ModelAndView("adminDashboard", "user", adminObject);
}
case "user": {
ModelAndView("userDashboard", "user", userObject);
}
}
}
adminDashboard.jsp
<html>
<head>
...
</head>
<body>
${user.adminId} <!-- reads this correctly -->
${user.userId} <!-- does not read this, which is good. -->
</body>
</html>
userDashboard.jsp
<html>
<head>
...
</head>
<body>
${user.adminId} <!-- reads this, which it should not -->
${user.userId} <!-- does not read this, but it should -->
</body>
</html>
有人可以向我解释为什么管理员用户模型属性仍然被传递,即使从技术上讲,代码甚至不应该进入该切换案例?我甚至想做什么?如果是这样,那将是一个什么样的例子?
答案 0 :(得分:0)
我建议您不要为用户个人资料级别维护两个jsp页面,而是建议使用JSTL If Else条件
<c:if test="${user.profileLevel=='admin'}">
<c:out value="${user.adminId}" />
</c:if>
如果您想在子用户级别进行渲染,可以使用
<c:choose>
<c:when test="${user.profile=='partner'}">
Partners with Us.
</c:when>
<c:otherwise>
Other Level.
</c:otherwise>
</c:choose>
可以嵌套在条件中。
在这种情况下,您的jsp将负责所访问的参数。对我来说,这听起来是更好的方法,因为在用户级页面中访问adminId不应该在第一时间发生。
答案 1 :(得分:0)
按以下方式更改您的控制器:
@Controller
@RequestMapping(value = "/dashboard")
public ModelAndView showDashboard(String userGroup) {
switch(userGroup) {
case "admin": {
ModelAndView("adminDashboard", "adminUser", adminObject);
break;
}
case "user": {
ModelAndView("userDashboard", "user", userObject);
break;
}
}
}
在您的adminDashboard.jsp中,访问如下:
<html>
<head>
...
</head>
<body>
${adminUser.adminId} <!-- reads like this -->
</body>
</html>