Salesforce 如何在映射中除最后一个值之外的每个值之间放置逗号

Salesforce 如何在映射中除最后一个值之外的每个值之间放置逗号,salesforce,visualforce,apex,Salesforce,Visualforce,Apex,所以问题陈述是:我有一个对象:Case_Article_Junction___c和两个字段Case,它有每个Case的id和Case__r.CaseNumber,它存储Case编号 挑战在于在可视的Force页面(一个超链接)上显示案例编号,单击该超链接可将我带到相应的案例详细信息,并将案例id作为配置的url中的参数 下面的apex控制器代码只是获取一个映射并查询特定物品id的案例id和案例编号 顶点类: public class NewTestApexClass { Map<Inte

所以问题陈述是:我有一个对象:Case_Article_Junction___c和两个字段Case,它有每个Case的id和Case__r.CaseNumber,它存储Case编号

挑战在于在可视的Force页面(一个超链接)上显示案例编号,单击该超链接可将我带到相应的案例详细信息,并将案例id作为配置的url中的参数

下面的apex控制器代码只是获取一个映射并查询特定物品id的案例id和案例编号

顶点类:

public class NewTestApexClass
{
 Map<Integer,Case_Article_Junction__c> mapToAccount = new 
 Map<Integer,Case_Article_Junction__c>();

public NewTestApexClass() {
    Integer i = 0;

    for (Case_Article_Junction__c a : [select Case__c, Case__r.CaseNumber from Case_Article_Junction__c where Article_shadow__c='a1Od0000000uAWK']) {

        mapToAccount.put(i, a);
        i++;

    } 
}

public Map<Integer,Case_Article_Junction__c> getMapToAccount() {
    return mapToAccount;
}
}
下面的Visualforce页面用于放置一个指向案例编号的超链接,并单击该超链接将我们带到以id为参数的相应案例页面

<apex:page controller="NewTestApexClass" showheader="false" 
applyHtmlTag="false" standardStylesheets="false" >

       <apex:repeat value="{!mapToAccount}" var="accNum">
       <apex:outputLink value="https://cadence--dev2--c.cs13.visual.force.com/apex/case_CDSInfo_Page?id={!mapToAccount[accNum].Case__c}">{!mapToAccount[accNum].Case__r.CaseNumber}</apex:outputLink>
           <apex:outputText>,</apex:outputText>
   </apex:repeat>
</apex:page>
现在我的问题是,除了最后一个案例,我如何在输入的每个案例之间放置逗号,也就是说,只有当有多个值时,案例编号之间必须有“逗号”,而当显示多个案例编号时,以及当只有一个案例编号时,最后一个值必须不存在, 当前,repeat会在每个值(包括最后一个值)后面加一个逗号


请帮助提供一个相同的解决方案

您不需要地图来存储您的数据,它完全可以用于列表。这很好,因为列表有索引的概念,最后一个元素。。。地图是可编辑的,但它过去是以不确定的顺序完成的,如果我没记错的话,Java 8改变了它,在SF~2年前采用了它

无论如何。解决此问题的一种方法是了解最后一个元素的Id,然后使用渲染属性:

<apex:repeat value="{!linksList}" var="link">
    <apex:outputLink value="/apex/case_CDSInfo_Page?id={!link.Case__c}">{!link.Case__r.CaseNumber}</apex:outputLink>
    <apex:outputText rendered="{!link.Id != lastRecordId}">,</apex:outputText>
</apex:repeat>
您甚至可以在没有辅助变量的情况下尝试使用{!linksList[linksList.size-1].Id}

另一种方法是使用CSS。我没有试过,但看起来很有希望。如果您认为这是一个值得研究的问题,请记住标记将为您创建一个列表,而无需手动循环


还有一种方法可以使用一个helper标记,该标记将从零开始,在每次迭代时递增,并将渲染属性与集合的大小进行比较。检查一些灵感。医生说不要依赖这种行为,尽管你的呼叫也是如此。

如果你需要字符串中的第一个值,那么使用以下方法:

//listOfTermCondtnIds=listOfTermCondtnIds.removeend(','); //split(',')[0]
listOfTermCondtnIds=listOfTermCondtnIds.split(',')[0];

是的,使用显示的第一种方法肯定有效!,谢谢很高兴我能帮忙:只是出于好奇——为什么你们公司决定需要一个自定义对象来存储这些信息?与标准相比,您获得了什么?