jsf - Comment afficher un saut de ligne avec outputText?




jsf-2 line-breaks (4)

Vous pouvez essayer de placer le "<br />" dans un regroupement de ressources, puis obtenir la valeur de ce regroupement de ressources.

J'ai besoin de faire un saut de ligne en utilisant outputText afin que je puisse utiliser le rendered attribué. j'ai essayé

<h:outputText value="<br/>" escape="false" />

mais il a généré une exception

The value of attribute "value" associated with an element type "null" must not contain the '<' character. 

JSF PAGE

<h:outputText value="#{car.crg}" escape="false" style="white-space: pre-wrap;word-wrap: break-word; " />

escape doit être false et écrire la méthode Bean Getter comme suit

 public String getCrg() {
         return crg.replace("<br/>", "&lt;br /&gt;");
        //return crg;
    }

Cela n'est en effet pas valide puisque Facelets est syntaxiquement invalide en XML. Vous auriez besoin d'échapper manuellement les caractères spéciaux XML comme < , > et ainsi de suite.

<h:outputText value="&lt;br/&gt;" escape="false" />

Vous pouvez cependant simplement émettre le <br/> dans le texte du modèle sans avoir besoin d'un <h:outputText> .

<br/>

Pour le rendre conditionnellement, placez-le par exemple dans un <ui:fragment> .

<ui:fragment rendered="#{bean.rendered}"><br /></ui:fragment>

Un <h:panelGroup> est également valide car il n'émet rien au HTML de toute façon.

<h:panelGroup rendered="#{bean.rendered}"><br /></h:panelGroup>

Eh bien, j'ai eu le même problème aujourd'hui et je l'ai résolu en créant un ConversionHelper générique et en l'utilisant dans le convertisseur. Pour cela, j'ai un EntityService qui est un SLSB générique que j'utilise pour effectuer des opérations CRUD simples pour tout type d'entité. Mes entités implémentent également une interface PersistentEntity, qui a des méthodes getId et setId et je les garde avec des clés primaires simples. C'est tout.

Au final, mon convertisseur ressemble à ceci:


@FacesConverter(value = "userConverter", forClass = User.class)
public class UserConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext ctx, UIComponent component, java.lang.String value) {

        return ConversionHelper.getAsObject(User.class, value);
    }

    @Override
    public String getAsString(FacesContext ctx, UIComponent component, Object value) {

        return ConversionHelper.getAsString(value);
    }
}

Et mon assistant de conversion ressemble à ceci:


public final class ConversionHelper {

    private ConversionHelper() {
    }

    public static <T> T getAsObject(Class<T> returnType, String value) {

        if (returnType== null) {

            throw new NullPointerException("Trying to getAsObject with a null return type.");
        }

        if (value == null) {

            throw new NullPointerException("Trying to getAsObject with a null value.");
        }

        Long id = null;

        try {

            id = Long.parseLong(value);

        } catch (NumberFormatException e) {

            throw new ConverterException("Trying to getAsObject with a wrong id format.");
        }

        try {

            Context initialContext = new InitialContext();
            EntityService entityService = (EntityService) initialContext.lookup("java:global/myapp/EntityService");

            T result = (T) entityService.find(returnType, id);

            return result;

        } catch (NamingException e) {

            throw new ConverterException("EntityService not found.");
        }
    }

    public static String getAsString(Object value) {

        if (value instanceof PersistentEntity) {

            PersistentEntity result = (PersistentEntity) value;

            return String.valueOf(result.getId());
        }

        return null;
    }
}

La création de convertisseurs pour les entités JPA simples consiste à dupliquer un convertisseur et à modifier 3 paramètres.

Cela fonctionne bien pour moi, mais je ne sais pas si c'est la meilleure approche en termes de style et de performance. Des conseils seraient appréciés.





jsf jsf-2 line-breaks