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

Существуют ли какие-либо инструменты или полезные шаблоны при работе с веб-дизайнерами в среде 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-версии веб-сайта). Это утомительно и чревато ошибками.


person walnutmon    schedule 06.04.2010    source источник
comment
Шаг 1: Прекратите помещать код Java в файлы JSP.   -  person DwB    schedule 20.03.2012


Ответы (1)


Ваш пример вовсе не 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.

person Daff    schedule 06.04.2010
comment
Спасибо за вдумчивый ответ. О библиотеках тегов... когда я увидел этот код, моим первым предложением было отдать предпочтение библиотекам тегов, а не встроенной Java, однако, когда разработчик ответил, почему?, у меня действительно не было никаких веских причин, кроме того, что я думаю, что они выглядят лучше. Кроме того, насколько я знаю, у веб-дизайнера нет возможности просматривать JSP без работающего сервера, что было бы проблемой, поскольку они должны фактически увидеть, как выглядит их страница, прежде чем передать ее нам (вот почему они используют HTML, я я отвечаю за превращение его в JSP) - person walnutmon; 06.04.2010