2013-02-27 7 views
5

Jaki jest właściwy sposób usunięcia przełącznika z mojego pliku JSP? Mam fabrykę, która może zwrócić wiele typów obiektów. Każdy z nich ma swoją własną logikę reprezentacji, więc muszę coś takiego:Jaki jest właściwy sposób usunięcia dużego przełącznika z mojego pliku 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> 

Mój zakład jest w oparciu o adnotacje, dzięki czemu można łatwo dodać stan z odpowiednim dopiskiem. Chcę zrobić coś podobnego do widoków tagów. Byłoby idealnie, gdybym dodał tylko 2 pliki: 1 stan z poprawną adnotacją i 1 plik znacznika.

+5

Dlaczego nie można utworzyć pojedynczy '' które delegaci pod maskami dalej do właściwej implementacji? – BalusC

+0

Czy nie "Model ModelAndView = nowy ModelAndView (" wynik/widok/"+ state.getClass(). GetSimpleName());' działa również? – Esailija

+0

'Model ModelAndView = nowy ModelAndView (" wynik/widok/"+ stan.getClass(). GetSimpleName());' będzie działać, ale co jeśli muszę wyświetlić listę wyników – user2050786

Odpowiedz

1

Umieść sateType w wyniku tag:

<r:state param=${state} type="${stateType}" /> 
Powiązane problemy