使用<ui:repeat> <h:inputtext>无法清除(重置)<h:inputtext>的值一旦填充

时间:2015-09-03 09:17:07

标签: jsf jsf-2 el uirepeat

以下是该方案: -

ControllerBean : -

private String attributeName;
private String attributeValue;
//setter getters of the attributeName and attributeValue

属性: -

<ui:repeat var="attribute" 
    value="#{controllerBean.attributeList}">
   <h:outputLabel value="#{attribute.attributeName}"/>
   <h:inputText value="#{attribute.attributeValue}">
</ui:repeat>

JSF代码

{{1}}

问题: -

一切正常,所有值都与列表绑定。当在文本框中填充attributeValue时,它会在相应的属性中更新。当我更改属性的值时,它也反映在辅助bean中。

但是当我尝试清除文本框的内容时,它不会将attributeValue设置为空字符串(或null)。它将以前填充的值保留在bean中。因此,用户永远不能将特定属性的值更新为null。

知道为什么吗?我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

您没有关闭<h:inputText>并使用@ViewScoped给定代码我可以保存空值。添加到commandButton action属性,方法打印出列表中的每个元素,看看它是否真的没有改变。

支持Bean

@Named(value = "cbean")
@ViewScoped
public class Cbean implements Serializable{

    private List<Attribute> attributeList = new ArrayList<>();

    public List<Attribute> getAttributeList() {
        return attributeList;
    }

    public Cbean() {
    }

    @PostConstruct
    private void init() {
        for (int i = 0; i < 10; i++) {
            Attribute a = new Attribute();
            a.setAttributeName("name" + i);
            a.setAttributeValue("value" + i);

            attributeList.add(a);
        }
    }

    public void print() {
        for (Attribute a : attributeList) {
            System.out.println("name = " + a.getAttributeName() + " value = " + a.getAttributeValue());
        }
    }
}

XHTML

<h:form>
    <ui:repeat var="attribute" 
               value="#{cbean.attributeList}">
        <h:outputLabel value="#{attribute.attributeName}"/>
        <h:inputText value="#{attribute.attributeValue}"/>
    </ui:repeat>
    <h:commandButton value="Submit" action="#{cbean.print()}" />
</h:form>

删除第3个元素的内容后:

Info:   name = name0 value = value0
Info:   name = name1 value = value1111
Info:   name = name2 value =
Info:   name = name3 value = value3
Info:   name = name4 value = value4
Info:   name = name5 value = value5
Info:   name = name6 value = value6
Info:   name = name7 value = value7
Info:   name = name8 value = value8
Info:   name = name9 value = value9