0

POI を使用してマネージド Bean から Excel スプレッドシートを生成しています。これが私の学生Beanです:

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());               
        }
}

これは完全に機能します。列名を含むスプレッドシートを生成し、学生 ID を各セルに挿入します (反復子によって返される各行)。

ただし、学生 Bean で使用できるプロパティ (ID、姓、名など) を反復処理し、スプレッドシートのセルにデータを入力したいと考えています。それ、どうやったら出来るの?Student Bean のプロパティをインデックスで参照できますか?

ありがとう、

ダン

4

1 に答える 1

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

その他のオプションについては、ドキュメントを参照してください。

編集:

この例では、メソッドを反復し、文字列を返すすべてのメソッドの現在の値を返します。

<?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
于 2013-04-17T19:20:17.533 に答える