2013-09-05 7 views
2

NVelocity를 사용하여 상당히 새로운입니다. 내 회사에 대한 오래된 템플릿 중 일부를 편집하려고하는데이 오류가 발생하는 이유는 무엇입니까? 주문에 여러 발송물이있는 경우 템플리트에서 여러 발송물 이름을 표시하고 하나만 발송물 이름을 표시하면 템플릿에서 확인하십시오. 여러 발송물이있을 때 올바르게 작동하지만 템플릿이 하나만 있으면 템플릿이 클래스 이름을 대신 출력하는 데 필요한 shiment 이름을 렌더링하지 않습니다.C 템플릿의 NVelocity 템플릿 오류

#if($order.Shipments.Count > 1) 
#foreach($shipment in $order.Shipments) 
#beforeall 
#each 
$shipment.ShipMethodName <strong>|</strong> 
#else 
$order.Shipments[0].ShipMethodName // in emails it renders "Orders.OrderShipmentCollection[0].ShipMethodName" 
#end 
#end 

도와주세요.

+0

어리석은 질문인데 죄송 합니다만 _else_ 절은 0 배송 사례 만 처리하는 것 같습니다. 내가 잘못 ? – jbl

+0

yes ... thats right .... 나는 질문을 편집했다 ... 그것은 여전히 ​​작동하지 않는 것 같다 ... –

+1

나는 "jar"보다는 "> 0"을 가진 if 문에 혼란 스럽다. "> 1". foreach에 #end 문이 없어서 템플릿에 오류도 편집했습니다. 무언가가 null이거나 실패 할 때 NVelocity는 일반적으로 템플릿 변수 참조 (예 : "$ order.Shipments [0] .ShipMethodName")를 작성하지만 유형 이름을 작성해서는 안된다는 것을 알고 있습니다. 나는 "$ order.Shipments [0]"을 인쇄하고 통과 할 데이터를 디버깅하려고합니다. 설명에 대해 –

답변

1

이 질문은 오래된 질문인데 나중에 해결책을 찾고있는 경우 답변을 수락하지 않은 낡은 질문을 통해 답변을 게시 할 것이라고 생각했습니다. 작년 9 월에이 논평을 게시했을 때 나는 그 오류를 어떻게 알지 못했습니까? NVelocity는 C#을 같은 인덱서를 지원하지 않기 때문에

$order.Shipments[0].ShipMethodName 당신에게 Orders.OrderShipmentCollection[0].ShipMethodName을 제공, 당신은 즉 C# 컴파일러는 인덱서에 대해 만드는 기본 방법입니다 $order.Shipments.get_Item(0).ShipMethodName을의 get_Item() 방법을 사용해야합니다.

$order.Shipments이 유형 이름 (Orders.OrderShipmentCollection)을 출력하고 나머지는 [0].ShipMethodName이 축약되어 인쇄됩니다.

+0

+1 ... –