2016-08-06 16 views
0

JSP에서 HTML 태그 속성을 생성하려고합니다. 아래 클래스는 HTML 입력 요소를 나타내고 parameters 필드는 태그 속성을 나타냅니다.JSP에서 HTML 태그 속성을 동적으로 생성하는 방법은 무엇입니까?

public class Input { 

    private Map<String, String> parameters; 

    public Input() { 
     parameters = new HashMap<>(); 
    } 

    // getters and setters 
} 

내 스프링 MVC 컨트롤러에서 입력을 포함하고 내 모델에 전달하는 목록을 만들었습니다.

@RequestMapping(value = "/add", method = RequestMethod.GET) 
public String add(Model model) { 
    List<Input> inputs = new ArrayList<>(); 
    // Creating objects and adding them to the list. 
    model.addAttribute("inputs", inputs); 
    return "add"; 
} 

나는 모든 개체가 올바르게 생성되었는지 확인했습니다. 나는 JSP 그러나, 입력 속성이 렌더링되지 않습니다

<c:forEach var="input" items="${inputs}"> 
    <div class="form-group"> 
     <label for="${input.parameters['id']}">${input.parameters['title']</label> 
     <input 
      <c:forEach var="param" items="${input.parameters}"> 
       <c:out value="${param.key}" />=<c:out value="${param.value}" /> 
      </c:forEach> 
     /> 
     <form:errors path="${input.parameters['name']}" />      
    </div> 
</c:forEach> 

에 올바른 방법으로 그들을 밖으로 인쇄에 문제가 :

<input =="="></input> 

그것은 내가 기대하지 않습니다. 구문이 잘못되었습니다.

답변

0

나쁜 아키텍처 디자인을 무시하면 논리가 정상적으로 보입니다. 단지 ${param}이고 예약 된은 HTTP 요청 매개 변수 맵을 나타내는 변수입니다. 예 : ${param.foo}bar 값을 http://example.com/context/page?foo=bar으로 인쇄합니다. our EL wiki page을 참조하십시오.

다른 이름으로 var="param"의 이름을 변경하고 다시 시도하십시오. "parameters"와 "param"대신에 "attributes"와 "attribute"를 사용하는 것이 더 이해하기 쉽고 코드를 더 잘 읽을 수 있습니다.

<c:forEach var="attribute" items="${input.attributes}"> 
    <c:out value="${attribute.key}" />=<c:out value="${attribute.value}" /> 
</c:forEach>