Salesforce-使用jQuery使用复选框删除表行
Salesforce- Using jQuery to delete table rows using checkbox
现在我得到的错误是检查了 sObject People_Language__c的无效字段。
不确定它是否不喜欢使用包装类还是什么,但我没有看到问题。
这是控制器
public with sharing class myClass {
public String pId {get; set;}
public list<Wrapper>pLanguages {get; set;}
//CONSTRUCTOR
public myClass(){
pId = ApexPages.CurrentPage().getparameters().get('id');
pLanguages = new List<Wrapper>();
for ( People_Language__c pl : [SELECT Id, Language__c, Fluency__c FROM People_Language__c WHERE Person__c=:pId] ) {
pLanguages.add(new Wrapper(pl));
}
}
public void deleteLanguage(){
List<People_Language__c> langsToDelete = new List<People_Language__c>();
for ( Integer i = 0; i < pLanguages.size(); i++ ) {
if ( pLanguages[i].checked ) {
langsToDelete.add(pLanguages.remove(i--).pl);
}
}
delete langsToDelete;
}
//WRAPPER
public class Wrapper {
public boolean checked {get; set;}
public People_Language__c pl {get; set;}
public Wrapper(People_Language__c pl) {
this.pl = pl;
this.checked = false;
}
}
}
视觉力量
<apex:pageBlock title="Language" id="language">
<apex:inputHidden id="delLanguage" value="{!languagesToDelete}"></apex:inputHidden>
<apex:pageBlockButtons location="top">
<apex:commandButton id="langNewBtn" value="{!$Label.New}" />
<apex:commandButton id="LangDel" value="{!$Label.del2}" action="{!deleteLanguage}" rerender="language"/>
</apex:pageBlockButtons>
<apex:pageBlockTable value="{!pLanguages}" var="lang" title="People Language">
<apex:column width = "25px">
<apex:inputCheckbox value="{!lang.checked}" />
</apex:column>
<apex:column styleClass="actionColumn" width = "25px">
<apex:facet name="header"> <apex:outputText value="Action" /> </apex:facet>
<apex:outputLink styleClass="actionLink" target="_top">Del</apex:outputLink>
</apex:column>
<apex:column >
<apex:facet name="header"> <apex:outputText value="Language" /> </apex:facet>
<apex:outputField value="{!lang.pl.Language__c}" />
</apex:column>
<apex:column >
<apex:facet name="header"> <apex:outputText value="Fluency" /> </apex:facet>
<apex:outputField value="{!lang.pl.Fluency__c}" />
</apex:column>
</apex:pageBlockTable>
</apex:pageBlock>
如果您想
从页面中隐藏行,jQuery可能会很有用,但实际上删除它们需要由Apex控制器处理。执行此操作的最简单方法可能是在控制器中使用包装类,然后deleteLanguage()
方法将能够遍历并删除选中复选框的任何记录。jQuery对于这种方法不是必需的。
使用此方法的简单 Apex 控制器:
public with sharing class PeopleLanguagesController {
public String pId {get; set;}
public List<Wrapper> pLanguages {get; set;}
//CONSTRUCTOR
public PeopleLanguagesController() {
pId = ApexPages.CurrentPage().getparameters().get('id');
pLanguages = new List<Wrapper>();
for ( People_Language__c pl : [SELECT Id, Language__c, Fluency__c FROM People_Language__c WHERE Person__c = :pId] ) {
pLanguages.add(new Wrapper(pl));
}
}
public PageReference deleteLanguage() {
List<People_Language__c> langsToDelete = new List<People_Language__c>();
for ( Integer i = 0; i < pLanguages.size(); i++ ) {
if ( pLanguages[i].checked ) {
langsToDelete.add((pLanguages.remove(i--)).pl);
}
}
delete langsToDelete;
return null;
}
//WRAPPER
public class Wrapper {
public boolean checked {get; set;}
public People_Language__c pl {get; set;}
public Wrapper(People_Language__c pl) {
this.pl = pl;
this.checked = false;
}
}
}
然后您的 VF 标记变为:
<apex:page controller="PeopleLanguagesController">
<apex:form>
<apex:pageBlock title="Language" id="language">
<apex:pageBlockButtons location="top">
<!--<apex:commandButton id="langNewBtn" value="{!$Label.New}" />-->
<apex:commandButton id="LangDel" value="Delete Languages" action="{!deleteLanguage}" rerender="language"/>
</apex:pageBlockButtons>
<apex:pageBlockTable value="{!pLanguages}" var="lang" title="People Language">
<apex:column width = "25px">
<apex:inputCheckbox value="{!lang.checked}" />
</apex:column>
<apex:column styleClass="actionColumn" width = "25px">
<apex:facet name="header"> <apex:outputText value="Action" /> </apex:facet>
<apex:outputLink styleClass="actionLink" target="_top">Del</apex:outputLink>
</apex:column>
<apex:column >
<apex:facet name="header"> <apex:outputText value="Language" /> </apex:facet>
<apex:outputField value="{!lang.pl.Language__c}" />
</apex:column>
<apex:column >
<apex:facet name="header"> <apex:outputText value="Fluency" /> </apex:facet>
<apex:outputField value="{!lang.pl.Fluency__c}" />
</apex:column>
</apex:pageBlockTable>
</apex:pageBlock>
</apex:form>
</apex:page>
免责声明:这些代码都没有经过测试,这只是我在记事本++中一起抛出一个例子。希望这能让您走上正轨!
更新:好的,我把像你这样的数据模型放在一起,更新后的代码编译并且似乎按预期运行。您不应该在 VF 页面上收到 Invalid field checked for sObject People_Language__c
错误,因为此字段是包装器的一部分 - 确保您{!lang.checked}
作为 apex:inputCheckbox
标记的值,而不是{!lang.pl.checked}
。
相关文章:
- 如何删除'被按压'state from复选框
- 添加和删除复选框,取决于输入值
- 如何使用 javascript 删除复选框
- 组合框更改时删除复选框和文本值
- 单击按钮时的多重删除复选框无法按要求工作
- 为什么我的代码在第一次 setInterval 调用时删除复选框控件
- 如何在角度 js 中从数组中删除复选框
- 从角度树视图中删除复选框
- 如何在隐藏字段中追加和删除复选框值
- 我有一个**Rad Combo Box**,其中有两个分隔符.如何仅从分隔符中删除复选框
- 在文本区域中添加/删除复选框值
- jQuery:如何在删除复选框后回调/恢复
- 根据某些业务逻辑动态添加和删除复选框事件
- 如何使用jquery添加和删除复选框的值
- jQuery根据索引删除复选框
- HTML, javascript -如何删除复选框中选中的表的行
- ngModel会自动删除复选框的“已选中”状态
- 从对话框中删除复选框并在复选框未打开时打开时出现问题't拆卸
- 动态删除复选框的问题
- 如何在图像的onclick事件上从追加元素中删除复选框元素后取消选中