Spring MVC与Web Designers合作

时间:2010-04-06 17:51:56

标签: java jsp spring-mvc

在Spring-MVC和JSP环境中与Web设计人员一起工作时,是否有任何工具或有用的模式可以减少从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 个答案:

答案 0 :(得分:2)

你的例子根本不是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>

对于整个图像,您应该考虑分配自己的bean类,该类具有可以在JSP中使用的属性。这样更清晰,并且您可以为设计人员提供所有可用属性和属性的文档,他们只需要学习taglib。唯一的另一种选择是让他们只进行设计并让其他人处理taglib。显然,视图中必须有一些像这样的控制流,并且对于用于编码HTML而不是JSP中的Java Source的人来说,taglib更容易解释。