如何将字符串列表作为隐藏输入从jsf页传递到请求范围内的后备bean [英] How to pass a list of string as hidden input from a jsf page to a request scoped backing bean

查看:38
本文介绍了如何将字符串列表作为隐藏输入从jsf页传递到请求范围内的后备bean的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将字符串列表作为隐藏的输入从jsf页面传递到支持bean.

I want to pass a list of strings as hidden input from a jsf page to the backing bean.

后备bean是请求范围的,必须是它.

The backing bean is request scoped and needs to be it.

尝试以这种方式进行操作,但似乎不起作用.有什么想法可以更好地做到这一点吗?

Trying to do it this way, but it doesn't seem to work. Any ideas how this can be done in a better way?

<ui:repeat value="#{bean.strings}" var="#{string}">
    <h:inputHidden value="#{string}"/>
</ui:repeat>

推荐答案

只需使用转换器作为列表值:

Just use a converter for the list value:

<h:inputHidden value="#{bean.strings}" converter="myStringListConverter" />

这里是一个转换器,它使用 @@@ 作为分隔符与String进行转换:

Here is a converter that converts to/from a String using @@@ as separator:

@FacesConverter("myStringListConverter")
public class StringListConverter implements Converter {

    // this is used as a regex, so choose other separator carefully
    private static final String MY_SEPARATOR = "@@@";

    @Override
    public Object getAsObject(FacesContext context, UIComponent component,
            String value) {
        if (value == null) {
            return new ArrayList<String>();
        }
        return new ArrayList<String>(Arrays.asList(value.split(MY_SEPARATOR)));
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component,
            Object value) {
        if (value == null) {
            return "";
        }
        return join((List<String>) value, MY_SEPARATOR);
    }

    /**
     * Joins a String list, src: http://stackoverflow.com/q/1751844/149872
     * 
     * @param list
     * @param conjunction
     * @return
     */
    public static String join(List<String> list, String conjunction) {
        StringBuilder sb = new StringBuilder();
        boolean first = true;
        for (String item : list) {
            if (first) {
                first = false;
            } else {
                sb.append(conjunction);
            }
            sb.append(item);
        }
        return sb.toString();
    }

}

如果您使用的是JSF 2,则应该已经可以使用.

If you are using JSF 2, this should work for you already as it is.

如果使用的是JSF 1.2,则只需删除 @FacesConverter 批注,然后将转换器注册在 faces-config.xml 中,如下所示:

In case you are using JSF 1.2, you just have to drop the @FacesConverter annotation and register the converter in the faces-config.xml like so:

<converter>
    <description>Simple String List Converer</description>
    <converter-id>myStringListConverter</converter-id>
    <converter-class>com.your.package.StringListConverter</converter-class>
</converter>

这篇关于如何将字符串列表作为隐藏输入从jsf页传递到请求范围内的后备bean的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆