Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有相同名称的两个不同模型属性,每个属性传递到不同的视图,但位于同一控制器中_Java_Jsp_Spring Mvc_Tomcat_El - Fatal编程技术网

Java 具有相同名称的两个不同模型属性,每个属性传递到不同的视图,但位于同一控制器中

Java 具有相同名称的两个不同模型属性,每个属性传递到不同的视图,但位于同一控制器中,java,jsp,spring-mvc,tomcat,el,Java,Jsp,Spring Mvc,Tomcat,El,基本上,我有一个控制器和两种不同的帐户类型。我希望根据用户的类型将视图显示为“adminDashboard.jsp”或“userDashboard.jsp”,并将名为“user”的模型属性传递给这些视图中的每个视图,但根据显示的视图的不同,使用不同的对象和不同的类。目前,即使它埋在一个开关盒中,我的代码只读取最先发生的,而不读取属于“激活”开关的 家庭控制器: @Controller @RequestMapping(value = "/dashboard") public ModelAndVie

基本上,我有一个控制器和两种不同的帐户类型。我希望根据用户的类型将视图显示为“adminDashboard.jsp”或“userDashboard.jsp”,并将名为“user”的模型属性传递给这些视图中的每个视图,但根据显示的视图的不同,使用不同的对象和不同的类。目前,即使它埋在一个开关盒中,我的代码只读取最先发生的,而不读取属于“激活”开关的

家庭控制器:

@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%依赖于此,这不是我的决定。请告诉我是否有适合我要求的解决方案。