【问题标题】:How to put a comma between every value excepting the last valuein a map如何在接受地图中最后一个值的每个值之间放置逗号
【发布时间】:2021-01-19 21:59:48
【问题描述】:

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

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

以下 apex 控制器代码只需获取一个地图并查询特定文章 ID 的案例 ID 和案例编号。

Apex 类:

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 在每个值(包括最后一个值)之后放置一个逗号

请帮忙提供解决方案

【问题讨论】:

    标签: salesforce visualforce apex


    【解决方案1】:

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

    无论如何。 一种解决方法是学习最后一个元素的 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 看起来很有希望。如果您认为这是值得研究的东西 - 请记住 apex:datalist 标签将为您构建一个无需手动循环的列表

    还有一种使用帮助器的方法 &lt;apex:variable&gt; 标记将从零开始,在每次迭代中递增,并且您可以将 rendered 属性与集合的大小进行比较。检查https://salesforce.stackexchange.com/a/193204/799 以获得一些灵感。文档说不要依赖这种行为,所以你的电话。

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 2021-11-11
      • 2019-05-10
      相关资源
      最近更新 更多