0

我有一个支持 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>

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

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);
}           }
}

我得到的错误是..只要我点击命令按钮“添加引用”,当我希望它简单地添加另一个文本框但也显示现有值时,所有现有值都会消失..

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;
    }
}
4

1 回答 1

1

只需删除process="@this"from并至少<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>

托管豆:

@ManagedBean
@ViewScoped
public class DataEntry {
    //...
}
于 2013-03-22T16:14:40.670 回答