Java 具有相同名称的两个不同模型属性,每个属性传递到不同的视图,但位于同一控制器中
基本上,我有一个控制器和两种不同的帐户类型。我希望根据用户的类型将视图显示为“adminDashboard.jsp”或“userDashboard.jsp”,并将名为“user”的模型属性传递给这些视图中的每个视图,但根据显示的视图的不同,使用不同的对象和不同的类。目前,即使它埋在一个开关盒中,我的代码只读取最先发生的,而不读取属于“激活”开关的 家庭控制器:Java 具有相同名称的两个不同模型属性,每个属性传递到不同的视图,但位于同一控制器中,java,jsp,spring-mvc,tomcat,el,Java,Jsp,Spring Mvc,Tomcat,El,基本上,我有一个控制器和两种不同的帐户类型。我希望根据用户的类型将视图显示为“adminDashboard.jsp”或“userDashboard.jsp”,并将名为“user”的模型属性传递给这些视图中的每个视图,但根据显示的视图的不同,使用不同的对象和不同的类。目前,即使它埋在一个开关盒中,我的代码只读取最先发生的,而不读取属于“激活”开关的 家庭控制器: @Controller @RequestMapping(value = "/dashboard") public ModelAndVie
@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>
<html>
<head>
...
</head>
<body>
${user.adminId} <!-- reads this, which it should not -->
${user.userId} <!-- does not read this, but it should -->
</body>
</html>
...
${user.adminId}
${user.userId}
userDashboard.jsp
<html>
<head>
...
</head>
<body>
${user.adminId} <!-- reads this correctly -->
${user.userId} <!-- does not read this, which is good. -->
</body>
</html>
<html>
<head>
...
</head>
<body>
${user.adminId} <!-- reads this, which it should not -->
${user.userId} <!-- does not read this, but it should -->
</body>
</html>
...
${user.adminId}
${user.userId}
有人能给我解释一下为什么管理员用户模型属性仍然被传递,即使从技术上讲,代码不应该进入那个切换案例中?我想做的是可能的吗?如果是这样的话,举个什么例子?我建议您不要为用户配置文件级别维护两个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本来就不应该发生 按如下方式更改控制器:
@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>
...
${adminUser.adminId}
假设您的开关盒有问题。它不包含断路器
您可以使用if else
块尝试相同的逻辑。我已经按照您的建议进行了尝试,尽管它返回userDashboard视图,但在我使用${user}EL标记时,它使用admin user model属性。非常麻烦,因为model属性只在与另一个视图关联的ModelAndView对象中声明。不幸的是,我的示例就是这样,这个解决方案对我没有帮助。我需要按照OP中概述的方式来做这件事的原因有10多个,其中大部分完全不在我的掌握之中。请让我知道我问的问题是否有解决方案。这不符合问题的条件。我不需要adminUser和user,只需要user。我的菜单导航是1000000%依赖于此,这不是我的决定。请告诉我是否有适合我要求的解决方案。