2015-03-06 3 views
1

У меня есть объект со списком вложенных объектов. Я хочу получить только первый элемент списка и показать одно из его свойств.Как получить первый элемент списка в JasperReports?

Пример:

public class Person { 
    List<Phone> phones; 
} 

public class Phone { 
    String type; 
    String number; 
} 

Здесь я только хочу, чтобы получить количество человек первый телефон (phones.get(0) в Java), и показать атрибут phone.numer.

Я начал так, какая работа, но показывает любые телефонные номера:

<field name="phones" class="java.util.List"/> 
<jr:list printOrder="Vertical"> 
    <datasetRun subDataset="Dataset1"> 
     <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{phones})]]></dataSourceExpression> 
    </datasetRun> 
    <jr:listContents> 
     <textField> 
      <textFieldExpression><![CDATA[$F{number}]]></textFieldExpression> 
     </textField> 
    </jr:listContents> 
</jr:list> 

Я также попытался следующий подход:

<field name="phones" class="java.util.List" /> 
<field name="phoneFirst" class="my.package.Phone"> 
    <fieldDescription><![CDATA[$F{phones}.get(0)]]></fieldDescription> 
</field> 
<field name="phoneFirstNumber" class="java.lang.String"> 
    <fieldDescription><![CDATA[$F{phoneFirst}.getNumber()]]></fieldDescription> 
</field> 

Результат: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : $F{phones}.get(0)

Итак, как могу я сообщить JasperReports, чтобы просто взять первый элемент коллекции?

ответ

-3

Я хотел бы сделать это в Java:

public class Person { 
    List<Phone> phones; 
    ... 
    public Phone getFirstPhone() { 
     if(this.phones != null) { 
      return this.phones.get(0); 
     } 
     return null; 
    } 
    ... 
} 

и затем что-то подобное в JRXML:

<field name="firstPhoneNumber" class="java.lang.String"> 
    <fieldDescription><![CDATA[$F{firstPhone}.getNumber()]</fieldDescription> 
</field> 
+0

Я хочу использовать сгенерированный сложный XML WebService объект ответа, таким образом, не может изменить класс , Я надеялся, что смогу добиться этого в jreports за то, что вам не нужно вводить объект переноса яшмы ... – membersound

+0

Я хотел бы знать, что не так с моим ответом, чтобы гарантировать 3 downvotes. – JamesB

+0

В исходном вопросе нет ничего, в котором говорится, что класс Person не может быть изменен. – JamesB

Смежные вопросы