Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Spring MVC работает с веб-дизайнерами

Автор вопроса: walnutmonОтветов: 1

Существуют ли какие-либо инструменты или полезные шаблоны при работе с веб-дизайнерами в среде Spring-MVC и JSP, чтобы облегчить переход от HTML к JSP и обратно?

Требования проекта диктуют, что представления будут часто изменяться, а эффективное внесение изменений может быть затруднено из-за большого количества Java-кода, который просачивается на уровень представления. В идеале я хотел бы удалить почти весь код Java из представления, но не похоже, что это работает с философией Spring/JSP, где часто способ удаления кода Java заключается в замене этого кода библиотеками тегов, которые по-прежнему будут иметь аналогичная проблема.

Чтобы немного прояснить мой вопрос, я включу некоторый существующий код (унаследованный мной), чтобы показать виды проблем, с которыми я, вероятно, столкнусь при изменении внешнего вида наших представлений:

<%-- Begin looping through results --%>
<%
List memberList = memberSearchResults.getResults();
for(int i = start - 1; i < memberList.size() && i < end; i++) {
    Profile profile = (Profile)memberList.get(i);
    long profileId = profile.getProfileId();
    String nickname = profile.getNickname();
    String description = profile.getDescription();
    Image image = profile.getAvatarImage();
    String avatarImageSrc = null;
    int avatarImageWidthNum = 0;
    int avatarImageHeightNum = 0;

    if(null != image) {
        avatarImageSrc = image.getSrc();
        avatarImageWidthNum = image.getWidth();
        avatarImageHeightNum = image.getHeight();
    }

String bgColor = i % 2 == 1 ? "background-color:#FFF" : "";
%>
<div style="float:left;clear:both;padding:5px 0 5px 5px;cursor:pointer;<%= bgColor %>" onclick='window.location="profile.sp?profileId=<%= profileId %>"'>
    <div style="float:right;clear:right;padding-left:10px;width:515px;font-size:10px;color:#7e7e7e">
        <h6><%= nickname %></h6>
        <%= description %>
    </div>
    <img style="float:left;clear:left;" alt="Avatar Image" src="<%= null != avatarImageSrc && avatarImageSrc.trim().length() > 0 ? avatarImageSrc : "images/defaultUserImage.png" %>"
         <%= avatarImageWidthNum < avatarImageHeightNum ? "height='59'" : "width='92'" %> />
</div>
<%
} // End loop
%>

Теперь, игнорируя некоторые запахи кода, очевидно, что если кто-то захочет изменить внешний вид этого DIV, будет необходимо заменить весь код Java/JSP в новый заданный HTML (дизайнеры не работают в JSP, у них есть собственные HTML-версии веб-сайта). Это утомительно и чревато ошибками.

  • Шаг 1: Прекратите помещать код Java в файлы JSP. DwB 20.03.2012

javaspring-mvcjsp

Ответы

Ответ 1 · рейтинг 2 · Daff

Ваш пример вовсе не MVC, но хорошей отправной точкой является JavaServer Pages Taglib JSTL а>. Поместив ваш пример в контроллер Spring и соответствующее представление JSP, он может выглядеть примерно так:

@Controller
public StuffController
{
    @RequestMapping("bla")
    public ModelAndView doBla()
    {
        ModelAndView view = new ModelAndView();
        // Get memberSearchResults somehow
        MemberSearchResult results = memberSearchResults.getResults();
        view.addAtrribute("memberList", results);
        view.setViewName("blaview");
        return view;
    }
}

И ваш вид JSP выглядит так

// blaview.jsp
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jstl/xml" prefix="x" %>
<c:forEach var="searchResult" items="${memberList}">
    <div>
        <h6>${searchResult.nickname}</h6>
        ${searchResult.description}
    </div>
</c:forEach>

Для всего образа вам следует подумать о назначении собственного класса компонента, который имеет свойства, которые можно использовать в JSP. Это намного чище, и учитывая, что вы предоставляете дизайнерам документацию по всем доступным свойствам и атрибутам, им нужно будет только изучить taglib. Единственным другим вариантом было бы позволить им заниматься только дизайном и позволить кому-то другому заниматься taglibs. Очевидно, что где-то в представлении должен быть какой-то поток управления, подобный этому, и taglibs гораздо проще объяснить людям, которые привыкли к кодированию HTML, чем исходный код Java в JSP.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы