【问题标题】:Convert inputText to byte[] in JSF在 JSF 中将 inputText 转换为 byte[]
【发布时间】:2011-03-07 20:03:46
【问题描述】:

我正在编写一个 Web 应用程序,它有一个 JSF 页面,后面有一个 bean。我遇到了麻烦,我认为这是因为 bean 需要一个特定字段的字节数组,并且它被提供了一个字符串。

据我了解,JSF 提供了一些功能,可以自动将您在 inputText 字段中输入的任何内容转换为所需的数据类型,但我认为当您需要 byte[] 时它不会这样做...

仅仅是为 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; } } 

【问题讨论】:

  • 这真的没有意义。请显示视图的相关部分(<h:inputText>)和 bean(绑定到输入值的属性/getter/setter)。还要详细说明它应该保存什么样的信息。

标签: java jsf glassfish byte


【解决方案1】:

答案是肯定的。这只是编写自定义转换器的问题。不要因为认为“简单的转换需要太多代码”而气馁。这是一个将自定义对象转换为字符串并返回的转换器的示例。这种转换器通常用于选择菜单:

@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" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-08
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2011-10-15
    • 2011-01-12
    相关资源
    最近更新 更多