Jsf 生成新行时如何维护/保存行值?
我有以下bean:Jsf 生成新行时如何维护/保存行值?,jsf,ajax4jsf,jsf-1.2,Jsf,Ajax4jsf,Jsf 1.2,我有以下bean: public class MyBean { public ArrayList<ReportRow> getReportRows() { return reportRows; } private final ArrayList<ReportRow> reportRows = new ArrayList<ReportRow>(Arrays.asList(
public class MyBean {
public ArrayList<ReportRow> getReportRows()
{
return reportRows;
}
private final ArrayList<ReportRow> reportRows =
new ArrayList<ReportRow>(Arrays.asList(
new ReportRow("","")
));
public ArrayList<ReportRow> getOrderList() {
return reportRows;
}
public String addAction() {
ReportRow row = new ReportRow("", "");
reportRows.add(row);
return null;
}
public class ReportRow{
String reportColumnName;
String reportColumnDesc;
public ReportRow(String reportColumnName,String reportColumnDesc) {
this.reportColumnName=reportColumnName;
this.reportColumnDesc=reportColumnDesc;
}
public String getReportColumnName()
{
return reportColumnName;
}
public void setReportColumnName(String reportColumnName)
{
this.reportColumnName = reportColumnName;
}
public String getReportColumnDesc()
{
return reportColumnDesc;
}
public void setReportColumnDesc(String reportColumnDesc)
{
this.reportColumnDesc = reportColumnDesc;
}
}
}
公共类MyBean{
公共ArrayList getReportRows()
{
返回报告行;
}
专用最终ArrayList reportRows=
新建ArrayList(Arrays.asList(
新报告行(“,”)
));
公共ArrayList getOrderList(){
返回报告行;
}
公共字符串addAction(){
ReportRow行=新的ReportRow(“,”);
reportRows.add(行);
返回null;
}
公共类报表行{
字符串reportColumnName;
字符串报告columndesc;
公共报告行(字符串reportColumnName、字符串reportColumnDesc){
this.reportColumnName=reportColumnName;
this.reportColumnDesc=reportColumnDesc;
}
公共字符串getReportColumnName()
{
返回报告列名称;
}
public void setReportColumnName(字符串reportColumnName)
{
this.reportColumnName=reportColumnName;
}
公共字符串getReportColumnDesc()
{
返回报告columndesc;
}
public void setReportColumnDesc(String reportColumnDesc)
{
this.reportColumnDesc=reportColumnDesc;
}
}
}
jsf页面:
<t:dataTable value="#{myBean.reportRows}" var="o"
id="reportColumnsTable" styleClass="standardTable" headerClass="standardTable_Header"
rowStyleClass="#{myBean.viewDelayedRsd}"
>
<h:column>
<t:outputLabel value="Column name:"></t:outputLabel>
<t:inputText id="ReportColumnName" value="#{o.reportColumnName}" required="true">
</t:inputText>
</h:column>
<h:column>
<t:outputLabel value="Column Desc:"></t:outputLabel>
<t:inputText id="ReportColumnDesc" value="#{o.reportColumnDesc}" >
</t:inputText>
</h:column>
<h:column>
<h:outputLink value="#add"><h:outputText value="Add"/>
<a4j:support ajaxSingle="true" event="onclick" action="#{rprtBean.addAction}"
reRender="reportColumnsTable,msgPanel" />
</h:outputLink>
</h:column>
</t:dataTable>
问题是,当我单击“添加”时,它会生成一个新行,并清除旧行,我想保留旧行的值,有什么想法吗?您使用的是
而不是
。
根本不提交表单,它触发一个简单的GET请求。
在
中无法正常工作。将其替换为
:
<t:saveState value="#{myBean}" />
或者因为您也在使用RichFaces/Ajax4jsf:
<a4j:keepAlive beanName="myBean" />
而不是
。
根本不提交表单,它触发一个简单的GET请求。
在
中无法正常工作。将其替换为
:
<t:saveState value="#{myBean}" />
或者因为您也在使用RichFaces/Ajax4jsf:
<a4j:keepAlive beanName="myBean" />
我只使用了a4j命令链接,一切正常。我只使用了a4j命令链接,一切正常。当我使用第一个解决方案时,它给出了一个异常:java.io.NotSerializableException,因此我使bean实现可序列化,错误消失了,但当我尝试它时,没有新的、仍然旧的行文本文件重置是,bean必须实现可序列化。试试
。顺便说一句,我不确定它与
的结合是如何工作的。也许
是唯一有效的方法。至少,关键是您需要在后续请求中保留相同的数据模型/bean。JSF2.x解决方案是将bean放在视图范围内。第三个解决方案也给了我一个例外:视图范围bean的属性“name”必须是literal根据属性名应该是beanName
,并且它应该接受EL。您使用的是什么RF/A4J版本?异常基本上告诉我们它实际上应该是一个类似于
的文本。试试看,显然你使用的是旧版本。myBean是指bean名称还是bean实例?对于第三种解决方案,这两种方法都不适用。当我使用第一种解决方案时,它会给出一个异常:java.io.NotSerializableException,因此我使bean实现了serializable,错误消失了,但当我尝试它时,没有新的、仍然旧的行文本文件重置是的,bean必须实现serializable。试试
。顺便说一句,我不确定它与
的结合是如何工作的。也许
是唯一有效的方法。至少,关键是您需要在后续请求中保留相同的数据模型/bean。JSF2.x解决方案是将bean放在视图范围内。第三个解决方案也给了我一个例外:视图范围bean的属性“name”必须是literal根据属性名应该是beanName
,并且它应该接受EL。您使用的是什么RF/A4J版本?异常基本上告诉我们它实际上应该是一个类似于
的文本。试试看,显然你使用的是旧版本。myBean是指bean名称还是bean实例?这两种方法都不适用于第三种解决方案。