Salesforce 在PageBlocktable的visualforce页面中动态添加行

Salesforce 在PageBlocktable的visualforce页面中动态添加行,salesforce,apex-code,visualforce,Salesforce,Apex Code,Visualforce,我正在创建一个虚拟visualforce页面,其代码为 <apex:page controller="sampleCon"> <apex:form> <apex:pageMessages id="message" /> <apex:pageBlock> <apex:pageBlockTable value="{!wrap1}" var="item" id="hello"> <apex:col

我正在创建一个虚拟visualforce页面,其代码为

<apex:page controller="sampleCon">
    <apex:form>
    <apex:pageMessages id="message" />
    <apex:pageBlock>
    <apex:pageBlockTable value="{!wrap1}" var="item" id="hello">
    <apex:column headerValue="String" value="{! item.x}"></apex:column>
    <apex:column headerValue="Action"><apex:commandButton value="{!if(item.i == size-1,'Add','Delete')}" onclick="AddOrDelete({! item.i});" rerender="message"></apex:commandButton></apex:column>
    </apex:pageBlockTable>
    </apex:pageBlock>
    <apex:actionRegion >
     <apex:actionFunction name="AddOrDelete" action="{!addElement}" reRender="message,hello">
     <apex:param value="" name="fieldName" />
  </apex:actionFunction>
     </apex:actionRegion>
    </apex:form>
</apex:page>

控制器代码为

public class sampleCon {
public List<Wrapper> wrap1{get;set;}
public Integer size{get;set;}

public sampleCon(){
wrap1=new List<Wrapper>();
wrap1.add(new wrapper(0));
 size=wrap1.size();

}

public PageReference addElement(){
size=wrap1.size();


System.debug('Hello ji'+Apexpages.currentPage().getParameters().get('fieldName')+'size is'+size);
Integer i=Integer.valueOf(ApexPages.currentPage().getParameters().get('fieldName'));

if(i == size-1)
{
wrap1.add(new wrapper(size));

size++;
}

return null;

}


    public class wrapper{
    public integer i{get;set;}
    public String x{get;set;}
    public wrapper(Integer p){
i=p;
    }}
    }
public类sampleCon{
公共列表wrap1{get;set;}
公共整数大小{get;set;}
公共样本{
wrap1=新列表();
wrap1.add(新包装器(0));
size=wrap1.size();
}
公共页面引用addElement(){
size=wrap1.size();
debug('Hello ji'+Apexpages.currentPage().getParameters().get('fieldName')+'size是'+size);
整数i=Integer.valueOf(ApexPages.currentPage().getParameters().get('fieldName');
如果(i==尺寸-1)
{
wrap1.添加(新包装(尺寸));
大小++;
}
返回null;
}
公共类包装器{
公共整数i{get;set;}
公共字符串x{get;set;}
公共包装器(整数p){
i=p;
}}
}
我正在尝试的是最后一行按钮标签应该是添加,其他按钮标签应该是删除当我按下添加按钮时,一个新行被添加,标签应该相应地更改。我正在添加行,但它没有按预期工作

初始页面截图为 当我按下“添加”按钮时,屏幕是这样的。
当我再次按下“添加”按钮时,屏幕看起来就像第一个屏幕截图。我希望在上面的屏幕截图中单击“添加”按钮时会再添加一行。有人能告诉我为什么在第二个屏幕截图中单击“添加”按钮时只显示一行,以及当我再次在上面的屏幕上单击“添加”按钮时如何更正这一点吗行将被添加,而不是显示初始屏幕。

我建议您在下面的帖子中列出一个列表:


希望这能有所帮助。

ya我想我也在做同样的事情,正如你在单击“添加”时看到的那样,我正在向列表中添加一个元素,并用一个元素增加大小,但为什么它没有增加,而是再次将大小设置为1请帮助我,我在这个问题上陷入了非常严重的困境,请帮助。请查看代码并给出更正。请依赖我们的帮助我想这就是你应该采取的方法。您需要将{!item.i}作为参数传递给控制器中的addElement,而您没有这样做。传递参数后,应将其递增,并使用参数而不是大小创建列表。即Wrap1.add(新包装器(I)),然后最后设置size=Wrap1.size()。