2009-09-30 8 views
1

ceci est ma définition de composant personnalisé:Facelet composant personnalisé - empêcher le rendu ui: insérer du contenu dans le composant personnalisé

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:ui="http://java.sun.com/jsf/facelets" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:c="http://java.sun.com/jstl/core" 
     xmlns:fn="http://java.sun.com/jsp/jstl/functions"> 
<c:if test="${empty required}"> 
<c:set var="required" value="false" /> 
</c:if> 
<c:if test="${empty disabled}"> 
<c:set var="disabled" value="false" /> 
</c:if> 
<c:if test="${not disabled}"> 
<div id="#{id}DIV"> 
<label for="#{id}" class="portlet-form-label">${label}</label> 
<ui:insert name="field" /> 
<c:if test="${required}">*</c:if> 
<strong class="portlet-msg-error" style="display: none;"><h:message for="#{id}" /></strong> 
</div> 
</c:if> 
</ui:composition> 

voici comment je peux l'utiliser:

<my:editLineInsert id="itSIN" label="#{label['label.stocks.income']}" tip="#{label['message.default.tooltip']}" disabled="#{engine.disabled['itSIN']}" required="#{engine.required['itSIN']}" > 
<ui:define name="field"> 
<h:inputText id="itSIN" value="#{order.income}" disabled="#{engine.disabled['itSIN']}" required="#{engine.required['itSIN']}" > 
<f:converter converterId="javax.faces.BigDecimal" /> 
<f:validator validatorId="V12DGS6DECS" /> 
</h:inputText> 
</ui:define> 
</my:editLineInsert> 

J'ai du mal avec <ui:insert name="field" />. Il rend TOUJOURS. Si désactivé = vrai, j'ai juste l'élément <input type="text" disabled="disabled" value="" name="itSIN" id="itSIN"/> en haut de la vue. NOTE: J'utilise ui: insert pour passer le composant jsf car je n'ai aucune idée de comment passer les validateurs à un h: inputText dans un composant personnalisé.

Répondre

1

Je suppose que vos <c:if> ne fonctionnent pas comme prévu, car ils sont évalués pendant la phase de construction de l'arborescence des composants, puis cessent d'être. Jetez un oeil à this page.

Personnellement, j'évite d'utiliser des étiquettes JSTL dans les facelets, à cause de ce genre de mises en garde qui les rendent contre-intuitives. Vous pouvez utiliser à la place de <c:if> les étiquettes <ui:fragment> ou <h:panelGroup> en utilisant leur attribut "rendu".

Questions connexes