2013-04-17 1 views
0

Я использую POI для создания таблицы Excel из моего управляемого компонента. Вот мой студенческий боб:Как выполнить итерацию свойств компонента для заполнения ячеек электронной таблицы

package edu.phc.students.model; 

public class Student { 
private String m_firstName; 
private String m_lastName; 
private String m_id; 

public Student() {} 

public Student(
String firstName, 
String lastName, 
String id, 
) 
{ 
     m_firstName=firstName; 
     m_lastName=lastName; 
     m_id=id; 

} 

public String getid() { 
     return m_id; 
} 

public void setid(String newid) { 
     m_id=newid; 
} 

public String getFirstname() { 
     return m_firstName; 
} 

public void setFirstname(String newFirstName) { 
     m_firstName=newFirstName; 
} 

public String getLastname() { 
     return m_lastName; 
} 

public void setLastname(String newLastname) { 
     m_lastName=newLastname; 
}  

} 

Это небольшой сегмент конечного кода (SSJS).

var students:java.util.List = studentlist.getStudents(); 
var iterator:java.util.Iterator = students.iterator(); 
var count = 0; 
while (iterator.hasNext()) { 
     var student:edu.phc.students.model.Student = iterator.next(); 
     count++; 
     var row:HSSFRow = sheet1.createRow(count); 
     for(f = 0 ; f <= fieldList.length-1 ; f++){//column List 
      // output student's data into Excel row 
      row.createCell((java.lang.Integer)(f)).setCellValue(student.getid());    
     } 
} 

Это прекрасно работает. Он генерирует электронную таблицу с именами столбцов и вставляет идентификатор студента в каждую ячейку (для каждой строки, возвращаемой итератором).

Однако, я хочу перебирать свойства, доступные для студенческого компонента - Идентификатор, Фамилия, Имя и т. Д. И заполнять ячейки электронной таблицы. Как мне это сделать? Могу ли я ссылаться на свойства студенческого компонента по индексу?

Спасибо,

Dan

ответ

1

Вы можете использовать java.lang.reflection. Вот пример для всех полей в классе студентов:

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 

    <xp:repeat id="repeat1" rows="30" var="field"> 
     <xp:this.value><![CDATA[#{javascript: 
     var student = new edu.phc.students.model.Student(); 
     student.getClass().getDeclaredFields()}]]> 
     </xp:this.value> 
     <xp:label value="#{field.name}" id="labelFieldName" /><xp:br /> 
    </xp:repeat> 
</xp:view> 

Результат выглядит следующим образом:

m_firstName 
m_lastName 
m_id 

Пожалуйста, проверьте documentation for other options.

EDIT:

Этот пример перебирает методы и возвращает текущие значения всех методов, которые возвращают строку:

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 

<xp:repeat id="repeat1" rows="30" var="method"> 
    <xp:this.value><![CDATA[#{javascript: 
     var student = new edu.phc.students.model.Student(); 
     student.setid("A"); 
     student.setLastname("Meiser"); 
     student.setFirstname("Hans"); 
     student.getClass().getDeclaredMethods()}]]> 
    </xp:this.value> 
    <xp:label id="label1"> 
     <xp:this.value> 
      <![CDATA[#{javascript: 
       if(method.getReturnType().getSimpleName() == 'String') 
        return method.invoke(student, null);}]]> 
     </xp:this.value> 
    </xp:label> 
    <xp:br /> 
</xp:repeat> 

</xp:view> 

Это создаст следующий вывод:

A 

Hans 

Meiser 
+0

Спасибо, что ответили Свену. Я не уверен, соответствует ли ваш ответ моим потребностям. Я ищу способ получить значения каждого из этих свойств для каждого ученика, фактически не ссылаясь на свойство по имени, поэтому мне не нужно вводить строку для каждого свойства следующим образом: row.createCell ((java. . lang.Integer) (0)) setCellValue (student.getid()); \t \t \t \t row.createCell ((java.lang.Integer) (1)). SetCellValue (student.getFirstname()); \t \t \t \t row.createCell ((java.lang.Integer) (2)). SetCellValue (student.getLastname()); –

+0

@ DanSoares: Я добавил еще один пример –

+0

Sven, Спасибо за этот пример. Я в конечном итоге создание метода (GetProperty) в моем студенческом бобе, который я тогда ссылается следующим образом: для (е = 0; х <= fieldList.length-1; е ++) {// Список столбца \t \t \t \t \t \t \t \t \t var itemval = student.getProperty ((java.lang.Целое число) (е)); \t \t \t \t \t если (itemval === NULL) { \t \t \t \t \t // ничего не делать \t \t \t \t \t} Else {\t \t \t \t \t \t \t \t \t java.lang.System. out.println ("Значение позиции:" + itemval); \t \t \t \t \t ряд.конкретизацияCell ((java.lang.Integer) (f)). SetCellValue (itemval); \t \t \t \t \t} \t \t \t} Большое спасибо Андреюс Chaliapinas из команды IBM XPages для решения. –

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