如何在接受地图中最后一个值的每个值之间放置一个逗号

How to put a comma between every value excepting the last valuein a map

所以问题陈述是:我有一个 Object:Case_Article_Junction__c 和两个字段 Case(其中包含每个案例的 ID)和 Case__r.CaseNumber(其中存储案例编号)。

挑战是在 Visual Force 页面上显示案例编号,一个超链接,单击它会带我到相应的案例详细信息,将案例 ID 作为 url 配置中的参数。

下面的 apex controller 代码简单地获取一个地图并查询案例 id 和特定文章 id 的案例编号。

顶点Class:

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>

现在我的问题是,除了最后一个案例之外,我如何在输入的每个案例之间加上逗号,也就是说 'comma' 必须出现在案例编号之间只有当有多个值并且不是最后一个值(当显示多个案例编号时)并且当只有一个案例编号时, 目前 repeat 在包括最后一个值

在内的每个值之后放置一个逗号

请帮忙提供解决方案

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

无论如何。 一种解决方法 是学习最后一个元素的 ID,然后使用 rendered 属性:

<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。我没试过,但 How to style unordered lists in CSS as comma separated text looks promising. If you decide it's something worth looking into - remember that apex:datalist 标签会为你构建一个列表,无需手动循环

还有一种使用助手 <apex:variable> tag that will start at zero, increment at each iteration and you'd base your rendered attribute on comparing it with collection's size. Check https://salesforce.stackexchange.com/a/193204/799 的方法来获得一些灵感。文档说不要依赖这种行为,所以你的电话。

如果您需要字符串中的第一个值,请使用:

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