2013-02-27 10 views
5

Qual è il modo giusto per rimuovere lo switch dal mio file JSP? Ho una fabbrica che può restituire più tipi di oggetti. Ognuno di loro ha una sua logica di rappresentanza, quindi ho bisogno di qualcosa di simile:Qual è il modo giusto per rimuovere un grande switch dal mio file 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> 

Mia fabbrica si basa su annotazioni, così posso aggiungere facilmente lo stato con l'annotazione corretta. Voglio fare qualcosa di simile per taggare le visualizzazioni. Sarebbe ideale se aggiungessi solo 2 file: 1 stato con annotazione corretta e 1 file di tag.

+5

Perché non creare un unico '' which delegati sotto i cofani oltre la giusta implementazione? – BalusC

+0

Non 'ModelAndView model = new ModelAndView (" result/view/"+ state.getClass(). GetSimpleName());' funziona anche? – Esailija

+0

'ModelAndView model = new ModelAndView (" result/view/"+ state.getClass(). GetSimpleName());' funzionerebbe, ma cosa succede se ho bisogno di mostrare l'elenco dei risultati – user2050786

risposta

1

Mettere il sateType nel risultato tag:

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