2016-08-06 4 views
0

Я пытаюсь создать атрибуты HTML-тегов в JSP. Следующий класс представляет собой элемент ввода HTML, а поле parameters представляет атрибуты тега.Как динамически генерировать атрибуты HTML-тегов в JSP?

public class Input { 

    private Map<String, String> parameters; 

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

    // getters and setters 
} 

В моем контроллере MVC Spring я создал список, который должен содержать входы и передавать его в мою модель.

@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"; 
} 

Я проверил и все объекты созданы правильно. У меня есть проблема с печатью их в правильном направлении, в СПЯ

<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} является зарезервировано Переменная EL, представляющая карту параметров запроса HTTP. Например. ${param.foo} печатает значение barhttp://example.com/context/page?foo=bar. См. Также our EL wiki page.

Переименовать var="param" что-то еще и повторить попытку. Использование «атрибутов» и «атрибута» вместо «параметров» и «парама» будет иметь больше смысла, а код более читабельным.

<c:forEach var="attribute" items="${input.attributes}"> 
    <c:out value="${attribute.key}" />=<c:out value="${attribute.value}" /> 
</c:forEach> 
Смежные вопросы