Преобразовать inputText в byte [] в JSF - PullRequest
1 голос
/ 07 марта 2011

Я пишу веб-приложение, у которого есть страница JSF с бином. У меня проблемы с этим, и я думаю, что это потому, что бин ожидает байтовый массив для одного конкретного поля, и ему предоставляется строка.

Насколько я понимаю, JSF предоставляет некоторые функции для автоматического преобразования того, что вы вводите в свои поля inputText, в требуемый тип данных, но я не думаю, что это происходит, когда вам нужен байт [] ...

Это просто вопрос написания пользовательского конвертера для JSF? Примерно так:

public class StringToByteArray implements Converter {

...

public byte[] getAsObject(FacesContext context, UIComponent component, String value) {
    if (StringUtils.isEmpty(value)){ return null;}

    byte[] valueAsBytes = new byte[];

    valueAsBytes = value.getBytes();

    return valueAsBytes; } } 

1 Ответ

2 голосов
/ 07 марта 2011

Ответ - да.Это просто вопрос написания собственного конвертера.Не падайте духом, думая, что «слишком много кода для простого преобразования».Вот пример конвертера, который преобразует пользовательский объект в строку и обратно.Этот тип конвертера часто используется для выбора меню:

@FacesConverter( value="merkmalConverter" )
public class MerkmalMenuConverter implements Converter {

    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (value != null) {
            Merkmal m = (Merkmal) value;
            return m.getBezeichnung();
        }
        return null; // Value is null.
    }

    @SuppressWarnings("unchecked")
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if (value != null) {
            MerkmalJpaController mJpaC = new MerkmalJpaController();
            List<Merkmal> mList = mJpaC.findMerkmalEntities();
            for (Merkmal m : mList) {
                if (m.getBezeichnung().equals(value)) {
                    return m;
                }
            }
        }
        return null; // Value is null or doesn't have any match.
    }
}

Используйте ваш конвертер в файле jsf, как показано здесь, в качестве дочернего элемента поля ввода для преобразования:

<f:converter converterId="merkmalConverter" />
...