Pessoal gostaria de saber se tem como colocar um indicador (no caso um asterisco vermelho) para todos os h:outputtexts que tem um for para um input REQUIRED
Alguma coisa que dessa para eu fazer num canto soh do codigo que valesse para todos esses casos, tipo seria muito facil, criar um grid e colocar outro output com um asterisco vermelho, mas ae eu teria que sair replicando isso em todos os campos required, eu gostaria que ao lado esquerdo de todos os ‘h:outputText’ que tivessem um ‘for’ para um campo required a aplicacao colocasse um asterisco vermelho
Se estiver utilizando JBoss Seam então você poderia aproveitar o componente s:decorate dele. Ou, se estiver utilizando o Facelets você poderia utilizar o ui:decorate para decorar teus inputs.
Uma maneira mais simples e prática é sobreescrever o renderer do h:outputLabel para que ele resolva isso. Eu já fiz isso há muito tempo numa aplicação, contudo não tenho mais o código comigo, porém a idéia é basicamente o que você disse no primeiro post.
Ok, ok, agora estou com um probleminha. O renderer nao esta funcionando por exemplo quando o label tem um for para uma ‘rich:listShuttle’. Acredito que esse lista nao seja uma instancia de UIInput
vou tentar alterar o codigo para aceitar esses casos.
EDIT
aqui uma versao que devera funcionar para todos os casos
[code]/**
Renderizador customizado de labels.
@author eu
*/
public class MyLabelRenderer extends LabelRenderer {
/**
* Esta método altera todos os componentes texto de umma página que tenham
* um atributo 'for' que aponta para um outro componente que tenha um
* atributo required 'true'. Colocando um asterisco vermelho na frente
* do label.
*
* @param context Contexto JSF.
* @param component Componente.
* @throws IOException Caso não consiga escrever na página.
*/
@Override
public final void encodeBegin(final FacesContext context,
final UIComponent component) throws IOException {
final ResponseWriter writer = context.getResponseWriter();
final Map<String, Object> attrs = component.getAttributes();
final String forAttr = (String) attrs.get("for");
if (forAttr != null) {
final UIComponent forComponent = component.findComponent(forAttr);
final Map<String, Object> forAttrs = forComponent.getAttributes();
final Boolean required = (Boolean) forAttrs.get("required");
if (required != null && required) {
writer.startElement(HTML.SPAN_ELEM, null);
writer.writeAttribute(HTML.ID_ATTR,
component.getClientId(context) + "RequiredLabel", null);
writer.writeAttribute(HTML.STYLE_ATTR, "color:red", null);
writer.writeAttribute(HTML.CLASS_ATTR, "requiredLabel", null);
writer.writeText("*", null);
writer.endElement(HTML.SPAN_ELEM);
}
}
super.encodeBegin(context, component);
}