我正在尝试为我的对象创建一个全局转换器。此转换器将序列化和反序列化扩展我的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。