2010-04-06 34 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

相關問題