2012-01-07 277 views
2

我想實現一個複合組件,它將顯示數組列表中的註釋。JSF facelet驗證條件爲真

<cc:interface> 
    <cc:attribute name="value" type="java.util.List" required="true" shortDescription="The list of objects that should be displayed"/> 
</cc:interface> 

<cc:implementation> 

    <ui:repeat var="comment" value="#{cc.attrs.commentList}"> 
     <div class = "comment-block"> 
      <h3>#{comment.title}</h3> 
      <h4>#{comment.author}</h4> 
      <p>#{comment.body}</p> 
      <h:link outcome = "editComment?id={comment.id}" value = "edit" /> 
     </div> 
    </ui:repeat> 

</cc:implementation> 

現在的問題是,只有當記錄的用戶是評論的作者時才應該顯示標籤。通常我會這樣做:

<c:if test = "${comment.authId == authUser.id}"> 
    <a href = "editComment.jsp?id=${comment.id}"> 
</c:if> 

我該如何在JSF中做這樣的事情?

回答

3

大多數JSF組件都具有屬性rendered,您可以在其中放置返回true或false的EL表達式。根據返回值,組件將被渲染或不渲染。在你的情況下,你可以試試這個:

<h:link rendered="${comment.authId == authUser.id}" 
     outcome = "editComment" value = "edit"> 
    <f:param name="id" value="#{comment.id}" /> 
<h:link> 
+1

實際上所有的JSF組件都有這個屬性,因爲它是在javax.faces.component.UIComponent中定義的。 – 2012-01-08 06:35:10

+0

我想,如果我想爲不同的url參數顯示不同的組件,我應該使用相同的方法嗎?例如:對於mysite.com/user.xhtml?action=view或mysite.com/user.xhtml?action=edit – TGM 2012-01-08 10:00:09

+0

@TGM我剛剛更新了我的答案,使用''標籤。將來,您可以將上述代碼重新用於不同的網址。您只需修改「結果」和「」的列表以符合您的要求。 – 2012-01-08 10:30:46