読者です 読者をやめる 読者になる 読者になる

yohjizzz's Blog

I'm a Programmer.

publicフィールドのEntityリストをJSPに表示する

Action だったらそもそも S2RequestProcessor でラッピングしてくれるので気にしなくてもok。
必要なのは、サーブレットフィルターやインターセプターで、
ちょくせつ request や session にpublicフィールドのオブジェクトや List を詰めるときに必要です○

こんな感じ↓で。

// 例えば Action にオリジナルのインターセプターを適用させる場合・・・

    @Resource
    @Binding(bindingType = BindingType.MUST)
    protected EmployeeService employeeService;

    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable {
        
        HttpSession session = this.request.getSession(true);
        
        if (session.getAttribute("categoryList") == null) {
            List<Employee> employeeList = this.employeeService.findAll();
            session.setAttribute(
                "employeeList", new ListWrapper(employeeList));
        }
        
        return invocation.proceed();
    }


ListWrapper (org.seasar.struts.action.ListWrapper) でラップすると、
各要素のオブジェクトのpublicフィールドをJSP(EL)でプロパティとして扱えます。


ListWrapper#get() の内部で WrapperUtil (org.seasar.struts.action.WrapperUtil)、
さらにその内部で BeanWrapper (org.seasar.struts.action.BeanWrapper) を使ってます。


S2RequestProcessor (org.seasar.struts.action.S2RequestProcessor) でも同じことをして
Action や ActionForm の publicフィールドをプロパティとして扱えるようにしてくれています。


JSPではいつもどおりにこう↓

<ul>
<c:forEach items="${employeeList}" var="employee">
<li>
${f:h(employee.department.name)} 
${f:h(employee.firstName)} ${f:h(employee.lastName)}
</li>
</c:forEach>
</ul>