如何在JSF中显示一个也需要编辑的字符串列表?

时间:2013-03-22 16:07:53

标签: jsf

我有一个支持bean,它有一个名为List cites的属性,其中Cite有一个名为“value”的字符串属性。在init方法中,我获取存储为逗号分隔字符串的值,将它们分成单独的字符串构建一个列出并显示引用列表。但我还想让用户能够在现有的网站上添加更多网站/编辑现有的网站内容。我怎样才能做到这一点 ?下面的代码是xhtml中的jsf,但它对我不起作用..

<div style="margin-top: 10px; padding: 3px 3px;">
                    <fieldset>                          
                        <legend>Cites Affected</legend>
                        <h:dataTable value="#{dataEntry.cites}" var="citeAffected">
                            <h:column>
                            <f:facet name="header" >
                                <h:outputText value="Cite"/>
                            </f:facet>    
                            <h:inputText value="#{citeAffected.value}"/>
                            </h:column>
                        </h:dataTable>
                    <h:commandButton value="Add cite" process="@this" action="#{dataEntry.addCite}"/>                       
                    </fieldset>
                </div>

在支持bean中......这就是我所拥有的

DataEntry
{
private List<CiteAffected> cites = new ArrayList<CiteAffected>();

public void addCite()
{
cites.add(new CiteAffected());
} 

public void editMetadata()
{
//update the db object 
}
private void init()
{

// get the value from database as a comma separated string
for(String citeAffected : Arrays.asList(sourceManualLoadProperties.getCitesAffected().split(",")))
            {
                CiteAffected cite = new CiteAffected();
                cite.setValue(citeAffected);
                this.cites.add(cite);
}           }
}

我得到的错误是..一旦我点击命令按钮“add cite”,当我希望它只是添加另一个文本框但显示现有值时,所有现有值都会消失。

public class CiteAffected
{
    private String value;

    /**
     *
     * @return the cite affected
     */
    public String getValue()
    {
        return value;
    }

    /**
     *
     * @param value the cite affected
     */
    public void setValue(final String value)
    {
        this.value = value;
    }
}

1 个答案:

答案 0 :(得分:1)

只需从process="@this"移除<h:commandButton>,然后至少将您的托管bean放在@ViewScoped中。

JSF代码:

<h:form>
    <h:dataTable id="dtCites" value="#{dataEntry.cites}" var="citeAffected">
         <!-- content... -->
    </h:dataTable>
    <h:commandButton value="Add cite" action="#{dataEntry.addCite}">
        <f:ajax render="dtCites" />
    </h:commandButton>
</h:form>

管理bean:

@ManagedBean
@ViewScoped
public class DataEntry {
    //...
}