在Display标记中显示java bean的Non属性

时间:2012-12-28 05:56:10

标签: jsp displaytag struts2

让我们说..我有以下java bean。

案例1 :(学生豆)

Integer id;

String name;

ArrayList<String> subjectNameList;

并使用上面的case1结构,我可以用来显示那样的显示标签。

<displaytag:table class="displayTable" id="studentList" name="studentist">
<displaytag:column property="id" title="id"/>
<displaytag:column property="name" title="name"/>
<displaytag:column property="subjectNameList" title="subjectNameList"/>
</displaytag:table>

但现在由于这些变化,学生豆变得像那样。

案例2 :(学生豆)

 Integer id;

 String name;

 ArrayList<Integer> subjectIdList;

因此,在显示标记表中,我知道我不能再直接显示主题名称列表,因为它不再是学生bean的属性。

我的问题是.. 有没有办法在显示标记中显示主题名称列表,如在Case1中(可以在Action类中获取并传递给每个学生bean的显示标记)?因为在Case2中,列表更改为ID(整数)列表。 我想在display标签的jsp页面中保持相同的外观和感觉。

1 个答案:

答案 0 :(得分:1)

您可以扩展TableDecorator以处理案例2,例如案例1.有关Decorators的更多信息

以上案例的示例TableDecorator实现:

public class StudentBeanDecorator extends TableDecorator {

    public String subjectNames()
    {
        StudentBean studentBean = (StudentBean)getCurrentRowObject();
        ArrayList<Integer> subjectIdList = studentBean.getSubjectIdList();

        // make a service call or as you like
        ArrayList<String> subjectNameList = studentService.getSubjectNameList(subjectIdList);

        // format the data as you want; here for sample, just doing comma separated string
        return Arrays.toString(subjectNameList.toArray());;
    }
}

并将装饰器映射到:table tag

<displaytag:table class="displayTable" id="studentList" name="studentist" decorator="com.sample.student.StudentBeanDecorator">
    <displaytag:column property="id" title="id"/>
    <displaytag:column property="name" title="name"/>
    <displaytag:column property="subjectNames" title="subjectNames"/>
</displaytag:table>