2012-02-24 97 views
2

之前,我開始使用我的問題,這裏是我的不幸的侷限性:JSF 1.2自定義組件:包括

  1. 我使用JSF 1.2,而不是2;所以沒有複合組件。
  2. 我使用JSP呈現Facelets代替;所以沒有那些複合組件。
  3. 我不能使用任何第三方的標籤庫(RichFaces的,ICEfaces的,等)

這些限制是一成不變的。

現在移動到我的問題。目前,我們有一個處理創建地址的JSP subview。有很多的javascript與此相伴,還有一個支持bean。此頁面從不直接使用。相反,它包括使用<jsp:include />

不過,也有,我希望能夠改變幾個屬性。例如,縣是否需要,我們目前是否正在進行清理等。爲了做到這一點,使用自定義組件(我認爲?)是有意義的。但是,我不確定最好的方法來做到這一點。

如果我可以,我只想把這個JSP成複合成分,用它來完成。但是,根據我的限制,這不是一個真正的選擇。

我有什麼選擇?如果不涉及javascript的數量,這並不會如此困難。我知道我的解釋是模糊的;然而,我正在尋找更多的指導,而不是直接的答案。我已經使用javascript等自定義JSF 1.x組件搜索了一些東西,但是我還沒有找到很多好的文章。

在此先感謝。

+2

聽起來好像他們希望你能挑飛了船尾辣椒戴着拳擊手套。到過那裏。這聽起來像你想在表單域上添加自定義驗證。真正的問題是,爲什麼'jsp:include'放棄了這個?一個自定義組件會帶來什麼,除了你學習如何在JSF1.2規範下編寫自定義組件的能力,恕我直言,這個自定義組件會被破壞? – 2012-02-24 18:18:10

+0

如果只是這麼簡單!沒有使用JSF驗證器進行驗證。甚至沒有定義所需的屬性。他們不想改變這一點。還有很多其他的定製需要在驗證之外完成。例如,每個地址都可以附加到contactId(聯繫表的PK)需要預先定義的其他聯繫人。還有顯示邏輯:這個地址可以是一個合法地址 - 一個是使用lat/long定義的 - 而不是郵寄地址。 – 2012-02-24 18:31:05

+0

@Zack ...我只注意到你是Yinzer的同伴,如果你有機會遇見我,我會爲我們創造一個空間。我想通過這個來談談。 – 2012-02-24 18:54:21

回答

2

創建一個JSP標記文件。

<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %> 
... 
<my:foo showAddress="true" /> 

注意,JSTL也是這裏 「視圖構建時間」 標籤等作爲Facelets的:如下(無需額外的XML配置)

/WEB-INF/tags/foo.tag

<%@ tag body-content="empty" %> 
<%@ attribute name="countryRequired" required="false" type="java.lang.Boolean" %> 
<%@ attribute name="showAddress" required="false" type="java.lang.Boolean" %> 

<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> 
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

<h:panelGrid columns="2"> 
    <h:outputLabel for="country" value="Country" /> 
    <h:inputText id="country" value="#{bean.country}" required="${countryRequired}" /> 

    <c:if test="${showAddress}"> 
     <h:outputLabel for="address" value="Address" /> 
     <h:inputText id="address" value="#{bean.address}" /> 
    </c:if> 
</h:panelGrid> 

聲明和使用它。另請注意,您不能使用#{}來引用JSP標記屬性。

+0

這似乎是一個很好的解決方案。在爲此添加屬性時,我仍然可以使用EL,對嗎? '' – 2012-02-27 13:01:33

+0

這不適用於IBM WAS 7(JSF 1.2,JSP 2.1)。 – Stefan 2013-03-26 19:44:42