我有一个支持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;
}
}
答案 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 {
//...
}