我试图找出如何测试字段(包含在apex:repeat中)以查看它们是否为空,或者为null,如果是,则显示表中的一些替代文本(例如:无记录显示)一张空白的桌子。以下现有代码段:
<apex:repeat var="auditList" value="{!relatedTo.Site_Audit__r}">
<tr>
<td>
<apex:outputField value="{!auditList.Audit_Type__c}" />
</td>
<td>
<apex:outputField value="{!auditList.Delivery_Date__c}" />
</td>
<td>
<apex:outputField value="{!auditList.Review_Date__c}" />
</td>
</tr>
</apex:repeat>
所以在伪代码中我正在寻找一个测试,例如:
IF RELATED RECORDS FOUND FOR APEX:REPEAT PERFORM FOLLOWING:
<apex:repeat var="auditList" value="{!relatedTo.Site_Audit__r}">
<tr>
<td>
<apex:outputField value="{!auditList.Audit_Type__c}" />
</td>
<td>
<apex:outputField value="{!auditList.Delivery_Date__c}" />
</td>
<td>
<apex:outputField value="{!auditList.Review_Date__c}" />
</td>
</tr>
</apex:repeat>
ELSE IF NO RELATED RECORDS PERFORM FOLLOWING:
<tr>
<td>
No records to display.
</td>
</tr>
提前感谢您的帮助!
更新以回应'eyescream'的第一个回答
给了apex:pageBlock方法一个镜头,但在尝试保存/部署时遇到了以下错误:
<messaging:emailTemplate> cannot contain <apex:pageBlock>.
现在这是一个生成附加PDF的电子邮件模板(请参阅下面代码的大纲)。情况就是这样......电子邮件模板中不允许使用pageBlock吗?谢谢你的帮助!
<messaging:emailTemplate subject="Your requested quote #{!relatedTo.Name}"
recipientType="Contact"
relatedToType="X360_Contract_Cycle__c">
<messaging:plainTextEmailBody >
.
.
.
</messaging:plainTextEmailBody>
<messaging:attachment renderAs="pdf" filename="{!relatedTo.name}">
.
.
.
<apex:pageBlock rendered="{!AND(NOT(ISNULL(auditList)),auditList.size>0)}">
<apex:repeat var="auditList" value="{!relatedTo.Site_Audit__r}">
<tr>
<td>
<apex:outputField value="{!auditList.Audit_Type__c}" />
</td>
<td>
<apex:outputField value="{!auditList.Delivery_Date__c}" />
</td>
<td>
<apex:outputField value="{!auditList.Review_Date__c}" />
</td>
</tr>
</apex:repeat>
</apex:pageBlock>
<apex:pageBlock rendered="{!OR(ISNULL(auditList),auditList.size=0)}">
<i>No records to display.</i>
</apex:pageBlock>
.
.
.
</messaging:attachment>
</messaging:emailTemplate>
答案 0 :(得分:4)
一般来说 - 将代码包装在更高的页面元素中(如<apex:pageBlock>
),然后使用属性rendered
。它是可选的,可用于大多数页面元素,the component reference应该为您提供每个标记支持的完整属性列表。
在你的情况下,我认为类似的东西应该可以解决问题:
<apex:pageBlock rendered="{!AND(NOT(ISNULL(auditList)),auditList.size>0)}">
Stuff is in, put "repeat" tag here.
</apex:pageBlock>
<apex:pageBlock rendered="{!OR(ISNULL(auditList),auditList.size=0)}">
No records to display.
</apex:pageBlock>
随意尝试语法。我已经在公式编辑器中使用了函数名称(对于公式字段,验证规则等),但正常的逻辑运算符如&amp;&amp;,||应该也可以。
答案 1 :(得分:1)
使用包装器(我个人最喜欢的),并使用一个公式来检查呈现属性的列表大小。
<apex:outputPanel rendered="{!relatedTo.Site_Audit__r.size = 0}">
No Records
</apex:outputPanel>
<apex:outputPanel rendered="{!relatedTo.Site_Audit__r.size != 0}">
<apex:repeat var="auditList" value="{!relatedTo.Site_Audit__r}">
...
</apex:repeat>
</apex:outputPanel>
答案 2 :(得分:0)
坚持使用包装器(使用apex:outputPanel或apex:variable)并创建一个返回列表大小的方法,即
public Integer listSize{get {
if(auditList != null)
return auditList.size();
else
return 0;}}
在确定可见性的条件中使用此选项。