2010-04-06 67 views
3

在Spring-MVC和JSP环境中与Web设计人员一起工作时,是否有任何工具或有用的模式可以减少从HTML到JSP之间的往返和返回的痛苦?Spring MVC与Web Designers一起工作

项目需求决定视图会经常变化,而且由于泄漏到视图层的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中是很有必要的(设计师不需要“ t在JSP文件中工作,他们有自己的HTML版本的网站)。这是乏味的,容易出错。

+0

第1步:停止在JSP文件中放入java代码。 – DwB 2012-03-20 14:35:52

回答

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

而且这样

// 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视图对于您应该考虑到分配的整体形象的事情它自己的bean类具有可以在JSP中使用的属性。这样更清洁,并且考虑到您提供了所有可用属性和属性的设计人员文档,他们只需要学习taglib即可。唯一的选择是让他们只做设计,让其他人处理标签库。很显然,在视图中的某处必须有一些控制流,而taglib对于在JSP中用于编码HTML而不是Java源代码的人员更容易解释。

+0

感谢您的深思。关于标记库......当我看到这段代码时,我的第一个建议是赞成标记库超过内联Java,但是,当开发人员回应“为什么?”时,除了我认为他们看起来更好以外,没有什么好的理由。另外,AFAIK没有办法让网页设计人员在没有运行服务器的情况下查看JSP,这是一个问题,因为他们必须在将它们交给我们之前真正看到他们的页面看起来像什么(这就是为什么他们使用HTML,I我负责把它变成JSP) – walnutmon 2010-04-06 18:43:28

+0

嗯,实际上有两个理由赞成taglibs。首先它使得代码更加清晰,并改善了控制器和视图之间的MVC分离,并且第二,它们可以提供更多的功能,这对编码来说是一件麻烦事。例如。令人敬畏的Displaytag(http://displaytag.sourceforge.net/1.2/)。既然你有责任把它变成JSP,最后的决定就在你身上我想...... – Daff 2010-04-07 08:28:55