Visualforce:仅当值不为 null 时才渲染抛出异常
Visualforce: Render only if value is not null throws exception
我正在构建一个 visualforce 页面,其中有一个包含多个列的 apex:datatable。
现在我希望“折扣”列仅在其值不为空且 >0 时显示。
我的代码如下:
<apex:dataTable width="100%" value="{!Opportunity.OpportunityLineItems}" var="oli">
<apex:column width="50%" headerClass="tableheaderleft" styleClass="tablebodyleft">
<apex:facet name="header">Bezeichnung</apex:facet>
<apex:OutputField value="{!oli.Name}"/>
</apex:column>
<apex:column width="{!If(oli.Discount!=null,If((oli.Discount>0),"10%","10%"),"10%")}" headerClass="tableheadercenter" footerClass="tablefootercenter" styleClass="tablebodycenter">
<apex:facet name="header">Anzahl</apex:facet>
<apex:OutputField value="{!oli.Quantity}"/>
<apex:facet name="footer"></apex:facet>
</apex:column>
<apex:column width="20%" headerClass="tableheaderright" styleClass="tablebodyright">
<apex:facet name="header">Einzelbetrag</apex:facet>
<apex:OutputField value="{!oli.UnitPrice}"/>
<apex:facet name="footer"></apex:facet>
</apex:column>
<apex:column rendered="{!If(oli.Discount!=null,(oli.Discount>0),false)}" headerClass="tableheadercenter" footerClass="tablefootercenter" styleClass="tablebodycenter">
<apex:facet name="header">Rabatt</apex:facet>
<apex:OutputField value="{!oli.Discount}"/>
<apex:facet name="footer"></apex:facet>
</apex:column>
<apex:column width="20%" headerClass="tableheaderright" styleClass="tablebodyright">
<apex:facet name="header">Gesamtbetrag</apex:facet>
<apex:OutputField value="{!oli.TotalPrice}"/>
<apex:facet name="footer"></apex:facet>
</apex:column>
</apex:dataTable>
但我总是遇到以下异常:
javax.faces.FacesException: core.apexpages.exceptions.ApexPagesDeveloperException: 运算符“>”的参数类型不正确。
有人知道为什么会出现这个异常吗?会不会是因为折扣 returns 一个百分比值?
非常感谢!
双引号内有双引号 quotes.You 可以改用单引号。
例如
<apex:column width="{!If(oli.Discount!=null,If((oli.Discount>0),'10%','10%'),'10%')}" headerClass="tableheadercenter" footerClass="tablefootercenter" styleClass="tablebodycenter">
<apex:facet name="header">Anzahl</apex:facet>
<apex:OutputField value="{!oli.Quantity}"/>
<apex:facet name="footer"></apex:facet>
</apex:column>
独立例子-
<apex:page>
<canvas id="myCanvas" width="{! if(true == true, '300%', '200%') }" height="300" style="border:1px solid">
Your browser does not support the HTML5 canvas tag.
</canvas>
</apex:page>
您在评论中阐明了“只有在至少一行有一个值时才想显示整列”。
您是否有从 Opp 行项目到 Opp 的 Discount-related rollup summary 字段?你可以做类似 rendered="{!Opportunity.DiscountLinesCount__c > 0}"
或 {!Opportunity.TotalDiscount__c > 0}
.
的事情
如果你有 apex 控制器(或扩展),你可以检查线条并设置一些布尔标志,然后基于它进行渲染。那是正式的方式。
非官方的,您可以在数据表之前循环遍历订单项,滥用 <apex:variable>
标记。这有点hack,但它可以在没有任何顶点的情况下工作。检查我对这个问题的回答:https://salesforce.stackexchange.com/q/193169/799
像这样。没有尝试 运行 但应该会给你一些想法。
<apex:variable var="hasDiscountLines" value="{!false}" />
<apex:repeat value="{!Opportunity.OpportunityLineItems}" var="oli">
<apex:variable var="hasDiscountLines" value="{!hasDiscountLines || oli.Discount != null}" />
</apex:repeat>
(...)
<apex:dataTable width="100%" value="{!Opportunity.OpportunityLineItems}" var="oli">
<apex:column rendered="{!hasDiscountLines}">
(...)
</apex:dataTable>
我正在构建一个 visualforce 页面,其中有一个包含多个列的 apex:datatable。
现在我希望“折扣”列仅在其值不为空且 >0 时显示。
我的代码如下:
<apex:dataTable width="100%" value="{!Opportunity.OpportunityLineItems}" var="oli">
<apex:column width="50%" headerClass="tableheaderleft" styleClass="tablebodyleft">
<apex:facet name="header">Bezeichnung</apex:facet>
<apex:OutputField value="{!oli.Name}"/>
</apex:column>
<apex:column width="{!If(oli.Discount!=null,If((oli.Discount>0),"10%","10%"),"10%")}" headerClass="tableheadercenter" footerClass="tablefootercenter" styleClass="tablebodycenter">
<apex:facet name="header">Anzahl</apex:facet>
<apex:OutputField value="{!oli.Quantity}"/>
<apex:facet name="footer"></apex:facet>
</apex:column>
<apex:column width="20%" headerClass="tableheaderright" styleClass="tablebodyright">
<apex:facet name="header">Einzelbetrag</apex:facet>
<apex:OutputField value="{!oli.UnitPrice}"/>
<apex:facet name="footer"></apex:facet>
</apex:column>
<apex:column rendered="{!If(oli.Discount!=null,(oli.Discount>0),false)}" headerClass="tableheadercenter" footerClass="tablefootercenter" styleClass="tablebodycenter">
<apex:facet name="header">Rabatt</apex:facet>
<apex:OutputField value="{!oli.Discount}"/>
<apex:facet name="footer"></apex:facet>
</apex:column>
<apex:column width="20%" headerClass="tableheaderright" styleClass="tablebodyright">
<apex:facet name="header">Gesamtbetrag</apex:facet>
<apex:OutputField value="{!oli.TotalPrice}"/>
<apex:facet name="footer"></apex:facet>
</apex:column>
</apex:dataTable>
但我总是遇到以下异常:
javax.faces.FacesException: core.apexpages.exceptions.ApexPagesDeveloperException: 运算符“>”的参数类型不正确。
有人知道为什么会出现这个异常吗?会不会是因为折扣 returns 一个百分比值?
非常感谢!
双引号内有双引号 quotes.You 可以改用单引号。
例如
<apex:column width="{!If(oli.Discount!=null,If((oli.Discount>0),'10%','10%'),'10%')}" headerClass="tableheadercenter" footerClass="tablefootercenter" styleClass="tablebodycenter">
<apex:facet name="header">Anzahl</apex:facet>
<apex:OutputField value="{!oli.Quantity}"/>
<apex:facet name="footer"></apex:facet>
</apex:column>
独立例子-
<apex:page>
<canvas id="myCanvas" width="{! if(true == true, '300%', '200%') }" height="300" style="border:1px solid">
Your browser does not support the HTML5 canvas tag.
</canvas>
</apex:page>
您在评论中阐明了“只有在至少一行有一个值时才想显示整列”。
您是否有从 Opp 行项目到 Opp 的 Discount-related rollup summary 字段?你可以做类似 rendered="{!Opportunity.DiscountLinesCount__c > 0}"
或 {!Opportunity.TotalDiscount__c > 0}
.
如果你有 apex 控制器(或扩展),你可以检查线条并设置一些布尔标志,然后基于它进行渲染。那是正式的方式。
非官方的,您可以在数据表之前循环遍历订单项,滥用 <apex:variable>
标记。这有点hack,但它可以在没有任何顶点的情况下工作。检查我对这个问题的回答:https://salesforce.stackexchange.com/q/193169/799
像这样。没有尝试 运行 但应该会给你一些想法。
<apex:variable var="hasDiscountLines" value="{!false}" />
<apex:repeat value="{!Opportunity.OpportunityLineItems}" var="oli">
<apex:variable var="hasDiscountLines" value="{!hasDiscountLines || oli.Discount != null}" />
</apex:repeat>
(...)
<apex:dataTable width="100%" value="{!Opportunity.OpportunityLineItems}" var="oli">
<apex:column rendered="{!hasDiscountLines}">
(...)
</apex:dataTable>