Тег JSP, который сокращает нулевые атрибуты iffing

Я ищу более чистый способ написать такой фрагмент jsp:

<a href="${model.link}" class="button"<c:if test="${not empty model.title"> title="${model.title}"</c:if>>

Этот код трудно читать. Проблема в том, что не должно быть создано пустого атрибута тега title="", поэтому эта часть должна быть iffed.

Я нашел тег <c:out> с его атрибутом значения по умолчанию, однако:

<c:out value='title="${model.title}"' default=""/>

не будет работать нормально, потому что значение никогда не будет нулевым (поскольку это безопасный String concat).

Есть ли способ написать такой простой материал короче, чище, лучше?


person Mateusz Chromiński    schedule 20.03.2012    source источник


Ответы (2)


Другой подход как таковой;

<a href="${model.link}" class="button"<% if (model.title != null) { %> title="${model.title}"<% } %>>

немного короче, чем ваш первый пример, но все же слишком загроможден.

Однако имейте в виду, что ваш заголовок все еще нуждается в дезинфекции, поскольку он инкапсулирован в теге html.

StringEscapeUtils.escapeHtml(mode.title)
person Marius    schedule 20.03.2012
comment
Проголосуйте за ваши усилия, но это никоим образом не чище. Спасибо за совет по побегу, но на самом деле я делаю это во внутренней реализации класса. - person Mateusz Chromiński; 20.03.2012

<c:if test = "${not empty model.title}">
<c:set var = "title" value = "title = '${model.title}'"/>
</c:if>
<a href="${model.link}" class="button" ${title}>

Вы также можете создать собственную библиотеку тегов, чтобы в итоге получилось что-то вроде этого:

<my:link class = "button" model = "${model}">...</my:link>

Поскольку спецификация сервлета somthing - скорее, вы можете реализовать taglib как jsp-сниппет или вы можете полностью использовать Java.

person slipset    schedule 20.03.2012
comment
Проголосуйте за ваши усилия, но это никоим образом не чище. - person Mateusz Chromiński; 20.03.2012
comment
В зависимости от обстоятельств, мне лично не нравится видеть ‹c: if внутри других тегов. - person slipset; 20.03.2012