Salesforce 在PageBlocktable的visualforce页面中动态添加行
我正在创建一个虚拟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
<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()。