Java 从jsp文件中删除大型开关的正确方法是什么

Java 从jsp文件中删除大型开关的正确方法是什么,java,jsp,tags,factory,Java,Jsp,Tags,Factory,从JSP文件中删除开关的正确方法是什么?我有一个工厂,可以返回多种类型的对象。它们每个都有自己的表示逻辑,所以我需要这样的东西: //From controller @RequestMapping(value = "/source", method = RequestMethod.POST) public ModelAndView doMainJob(@RequestParam("text") String text) { ResultState state = new ResultSt

从JSP文件中删除开关的正确方法是什么?我有一个工厂,可以返回多种类型的对象。它们每个都有自己的表示逻辑,所以我需要这样的东西:

//From controller
@RequestMapping(value = "/source", method = RequestMethod.POST)
public ModelAndView doMainJob(@RequestParam("text") String text) {
    ResultState state = new ResultStateFactory().fromString(text);
    ModelAndView model = new ModelAndView("result/view");
    model.addObject("state", state);
    model.addObject("stateType", state.getClass());
    return model;
}

//from jsp/result/view.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="main"  tagdir="/WEB-INF/tags" %>
<%@taglib prefix="r"  tagdir="/WEB-INF/tags/result" %>
<main:basic_layout>
  <jsp:body>
    <c:choose>
      <c:when test="${stateType == StateA}"><r:stateA param=${state} /></c:when>
      <c:when test="${stateType == StateB}"><r:stateB param=${state} /></c:when>
      <c:when test="${stateType == StateC}"><r:stateC param=${state} /></c:when>
      .
      .
      .
      <c:when test="${stateType == StateX}"><r:stateX param=${state} /></c:when>
      <c:when test="${stateType == StateY}"><r:stateY param=${state} /></c:when>
    </c:choose>
  </jsp:body>
</main:basic_layout>
//来自控制器
@RequestMapping(value=“/source”,method=RequestMethod.POST)
公共模型和视图域作业(@RequestParam(“text”)字符串文本){
ResultState=new ResultStateFactory().fromString(文本);
ModelAndView模型=新的ModelAndView(“结果/视图”);
model.addObject(“state”,state);
addObject(“stateType”,state.getClass());
收益模型;
}
//从jsp/result/view.jsp
.
.
.

我的工厂是基于注释的,所以我可以轻松地使用正确的注释添加状态。我想做一些类似于标记视图的事情。如果我只添加两个文件,那将非常理想:一个具有正确注释的状态和一个标记文件。

sateType
放入标记结果中:

<r:state param=${state} type="${stateType}" />


为什么不创建一个单独的
,它在引擎罩下进一步委托给正确的实现呢?
ModelAndView model=newmodelandview(“result/view/”+state.getClass().getSimpleName())是否也工作?
ModelAndView model=newmodelandview(“结果/视图/”+state.getClass().getSimpleName())可以,但如果我需要显示结果列表呢