猿问

如何为数据表的每一行设置转换器属性?

我创建了一个自定义ISO日期时间Converter:


public class IsoDateTimeConverter implements Converter, StateHolder {


    private Class type;

    private String pattern;


    private boolean transientValue = false;


    public void setType(Class type) {

        this.type = type;

    }


    public void setPattern(String pattern) {

        this.pattern = pattern;

    }


    @Override

    public Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException {

        if (StringCheck.isNullOrEmpty(value)) {

            throw new ConverterException("value not specified");

        }


        try {

            if (IsoDate.class.equals(type)) {


                if (WebConst.ISO_DATE_NONE.equals(value)) {

                    return IsoDate.DUMMY;

                } else {

                    //TODO User spezifische TimeZone auslesen

                    return new IsoDate(value, TimeZone.getDefault().getID());

                }


            } else if (IsoTime.class.equals(type)) {


                if (WebConst.ISO_TIME_NONE.equals(value)) {

                    return IsoTime.DUMMY;

                } else {

                    //TODO User spezifische TimeZone auslesen

                    return new IsoTime(value, TimeZone.getDefault().getID());

                }


            } else if (IsoTimestamp.class.equals(type)) {


                if (WebConst.ISO_TIMESTAMP_NONE.equals(value)) {

                    return IsoTimestamp.DUMMY;

                } else {

                    //TODO User spezifische TimeZone auslesen

                    return new IsoTimestamp(value, TimeZone.getDefault().getID());

                }


            } else {

                throw new ConverterException("value not convertible");

            }

        } catch (Exception e) {

            throw new ConverterException(e.getMessage());

        }

    }

问题是,当我第一次打开该视图时,所有属性仅在我的Converter类中设置一次,然后数据表根据初始属性渲染并转换值。


我希望属性是按行设置的。我该如何实现?


阿晨1998
浏览 413回答 2
2回答

慕森王

我使用f:convertNumber(与您的f:*模式匹配),动态属性currencyCode="#{rowVar.someCurrencyCode}"by someCurrencyCode是实体的属性,rowVar来自p:dataTable var="rowVar"。那么我必须在这里编写自己的转换器吗?我已经有了Primefaces 6.2,如果有帮助的话。否则Omnifaces的事情看起来很简单。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答