2013-02-27 2 views
5

Каков правильный способ удалить ключ из моего JSP-файла? У меня есть фабрика, которая может возвращать несколько типов объектов. Каждый из них имеет свою собственную логику представления, так что мне нужно что-то вроде этого:Каков правильный способ удаления большого переключателя из моего файла 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> 

Моя фабрика основана на аннотации, так что я могу легко добавить состояние с правильной аннотацией. Я хочу сделать что-то похожее на теги. Было бы идеально, если бы я добавил только 2 файла: 1 состояние с правильной аннотацией и 1 файл тега.

+5

Почему вы не создать единый '<г: состояния типа = "$ {stateType}" Param = "$ {} состояния">', который делегаты под капотом далее для правильного осуществления? – BalusC

+0

Не будет ModelAndView model = new ModelAndView ("result/view /" + state.getClass(). GetSimpleName()); 'работа тоже? – Esailija

+0

'ModelAndView model = new ModelAndView (" result/view/"+ state.getClass(). GetSimpleName());' будет работать, но что, если мне нужно показать список результатов – user2050786

ответ

1

Поместите sateType в результате тегов:

<r:state param=${state} type="${stateType}" /> 
Смежные вопросы