转换器在超类上使用forClass失败

时间:2015-05-11 01:24:34

标签: jsf converter

我正在尝试为我的对象创建一个全局转换器。此转换器将序列化和反序列化扩展我的Model类的任何对象。

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import javax.faces.component.EditableValueHolder;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

import org.jboss.security.Base64Utils;

import util.base.Model;

@FacesConverter(forClass=Model.class)
public class ModelConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext context, UIComponent component,     String string) {
        Model obj = null;
        try {
            ByteArrayInputStream bais = new     ByteArrayInputStream(Base64Utils.fromb64(string));
            ObjectInputStream ois = new ObjectInputStream(bais);
            obj  = (Model)ois.readObject();
            ois.close();
            EditableValueHolder comp = (EditableValueHolder) component;
                comp.addValidator(context.getApplication().createValidator("modelValidator"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return obj;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component,     Object obj) {
        String str = "";
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeObject(obj);
            oos.close();
            oos.reset();
            str = Base64Utils.tob64(baos.toByteArray());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return str;
    }

}

在呈现页面时正确调用getAsString方法,但从不调用getAsObject方法。我不想使用f:converter标签或“converter”属性。

XHTML片段:

<f:form>
    <p:selectOneMenu id="category" value="#{recordBean.record.category}">
        <f:selectItem noSelectionOption="true" itemLabel="Selecione" />
        <f:selectItems value="#{recordBean.categories}" var="category" itemLabel="#{category}" itemValue="#{category}"  />
    </p:selectOneMenu>
    <p:commandButton ajax="false" value="Salvar" action="#{recordBean.save}" icon="ui-icon-disk" />
</f:form>

我正在使用primefaces但是使用标准的JSF标签我得到了同样的错误:value无效。

放入forClass = Object.class,调用getAsObject。

0 个答案:

没有答案