[Seasar-user:3500] Re: 自作のページャーを動作させたい

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2006年 4月 14日 (金) 19:41:18 JST


関です。

自作ページャーのサンプルを引き続き作成しております。

> > 参考になるかどうか分かりませんが、以下の私のブログを見てみてください。
> > http://d.hatena.ne.jp/mattena31/20050819

同じような事をしていらっしゃる方が他にもおられました。
http://d.hatena.ne.jp/uchd/20060320/1142844703

これらのソースを参考にサンプルを修正したのですが、
いまだに動作しない状態です。

「検索画面」→「結果画面」→「ページャーをクリックしての結果画面」
と言う流れの中で、ページャーをクリックしての結果画面に行くときに
ConditionDtoに検索条件が設定されません。
詳細:
「結果画面」→「ページャーをクリックしての結果画面」の際、
「結果画面」のm:actionに「m:action="#{employeeAction.view}」と記述してあるので
EmployeeActionImplのviewメソッドを実行する前の
setEmployeeConditionDtoメソッドは実行されます。
しかし、渡される引数のオブジェクトは、html側で「m:inject="f:param"」として
設定した「EmployeeConditionDto」に値が入っていません。

検索画面で設定した日付2個と、Limit、Offsetは結果画面では反映されています。

JSPは触った事が無く、仕事も手が離せない状態ですのでまったりとやっております。
何か一言ヒントだけでもいただければと思いメールをお送りさせていただきました。

よろしくお願いいたします。

以下、関係のありそうなソースを載せておきます。

==============================
EmployeeActionImpl.java
==============================
package jsf.action.impl;

import java.util.ArrayList;
import java.util.List;
import org.seasar.dao.pager.PagerViewHelper;
import jsf.action.EmployeeAction;
import jsf.dto.EmployeeConditionDto;
import jsf.dto.EmployeeListDto;
import jsf.dto.PageDto;
import jsf.entity.Employee;
import jsf.logic.EmployeeLogic;

public class EmployeeActionImpl implements EmployeeAction {

	private EmployeeConditionDto	employeeConditionDto;
	private	EmployeeListDto			employeeListDto;
	private EmployeeLogic			employeeLogic;
	private PagerViewHelper 		pagerViewHelper;
	private List pageList;			// ページャーのリスト

	public EmployeeActionImpl() {

	}

	public String view() throws Exception {
		employeeListDto		= employeeLogic.getEmployeeListDto(employeeConditionDto);
		pagerViewHelper = new PagerViewHelper(employeeConditionDto);
		pageList = new ArrayList();
		for (int i = 0; i <= pagerViewHelper.getLastPageIndex(); i++) {
			PageDto page = new PageDto();
			page.setNo(i+1);
			page.setOffset(i*pagerViewHelper.getLimit());
			pageList.add(page);
		}
		return "test-result";
	}

	public String select() {
		System.out.println("select");
		return null;
	}

	public EmployeeConditionDto getEmployeeConditionDto() {
		return employeeConditionDto;
	}

	public void setEmployeeConditionDto(EmployeeConditionDto employeeConditionDto) {
		this.employeeConditionDto = employeeConditionDto;
	}

	public EmployeeListDto getEmployeeListDto() {
		return employeeListDto;
	}

	public List getPageList() {
		return pageList;
	}

	public void setPageList(List pageList) {
		this.pageList = pageList;
	}

	public PagerViewHelper getPagerViewHelper() {
		return pagerViewHelper;
	}

	public void setPagerViewHelper(PagerViewHelper pagerViewHelper) {
		this.pagerViewHelper = pagerViewHelper;
	}

	public void setEmployeeListDto(EmployeeListDto employeeListDto) {
		this.employeeListDto = employeeListDto;
	}

	public EmployeeLogic getEmployeeLogic() {
		return employeeLogic;
	}

	public void setEmployeeLogic(EmployeeLogic employeeLogic) {
		this.employeeLogic = employeeLogic;
	}

}




==============================
test-result.html
==============================
<html xmlns:m="http://www.seasar.org/maya">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>結果画面</title>
</head>
<body>
	<span m:inject="f:param" m:name="layoutTitle" m:value="結果画面"/>

	<span m:inject="s:insert" m:name="content">
		<form>
			該当件数:<span m:value="#{pagerViewHelper.count}"/>件&nbsp;
<hr/>

			<div>
			【Pager:
		    <span m:inject="s:forEach" m:items="#{pageList}" m:var="e" m:varIndex="i">

				<span m:rendered="#{i == pagerViewHelper.pageIndex}">
					[<span m:value="#{i+1}">#</span>]
				</span>

				<span m:rendered="#{i != pagerViewHelper.pageIndex}">
					<a href="#" m:action="#{employeeAction.view}">
			    		<span											m:value="#{i+1}">#</span>
			    		<span m:inject="f:param" m:name="startDate" 	m:value="#{employeeConditionDto.startDate}"/>
			    		<span m:inject="f:param" m:name="endDate" 		m:value="#{employeeConditionDto.endDate}"/>
			    		<span m:inject="f:param" m:name="limit" 		m:value="#{employeeConditionDto.limit}"/>
			    		<span m:inject="f:param" m:name="offset" 		m:value="#{employeeConditionDto.offset * i}"/>
					</a>
				</span>
				&nbsp;
		    </span>
			】
			</div>

		<table border="1">
			    <tr>
			        <th>コード</th>
			        <th>氏名</th>
			        <th>アクション</th>
			    </tr>
		    <span m:inject="s:forEach" m:items="#{employeeListDto}" m:var="e" m:varIndex="i">
			    <tr>
			    	<td><span m:value="#{e.Employee_Code}">0000</span></td>
			    	<td><span m:value="#{e.Employee_Name}">シーサー太郎</span></td>
			    	<td>[<a m:action="#{employeeAction.select}">action</a>]</td>
			    </tr>
		    </span>
		</table>
		<hr/>

		</form>
	</span>
</body>
</html>


==============================
test-input.html
==============================
<html xmlns:m="http://www.seasar.org/maya">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>検索画面</title>
</head>
<body>
	<span m:inject="f:param" m:name="layoutTitle" m:value="検索画面"/>

	<span m:inject="s:insert" m:name="content">
		<form>
			<table>
				<tr>
					<td>
						開始日:<input
							type="text"
							m:value="#{employeeConditionDto.startDate}"
							id="startDate"
							value="startDate"/>
					</td>
				</tr>
				<tr>
					<td>
						終了日:<input type="text"
							m:value="#{employeeConditionDto.endDate}"
							id="endDate"
							value="endDate"/>
					</td>
				</tr>
				<tr>
					<td>
						Limit:<input type="text"
							m:value="#{employeeConditionDto.limit}"
							id="limit"
							value="limit"/>
					</td>
				</tr>
				<tr>
					<td>
						Offset:<input type="text"
							m:value="#{employeeConditionDto.offset}"
							id="offset"
							value="offset"/>
					</td>
				</tr>
				<tr>
					<td>
						<input type="button"
							value="閲覧"
							m:action="#{employeeAction.view}" />

					</td>
				</tr>
			</table>


		</form>

	</span>
</body>
</html>

==============================
app.dicon
==============================
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
	"http://www.seasar.org/dtd/components.dtd">
<components>

	<include path="jsf.dicon"/>
	<include path="dao.dicon"/>

	<include path="jsf/dicon/allaop.dicon"/>

	<component
		class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister">
		<property name="instanceDef">
			@[E-MAIL ADDRESS DELETED]
		</property>
		<initMethod name="addClassPattern">
			<arg>"jsf.action.impl"</arg>
			<arg>".*ActionImpl"</arg>
		</initMethod>
	</component>

	<component
		class="org.seasar.framework.container.autoregister.AspectAutoRegister"
	>
		<property name="interceptor">actionInterceptorChain</property>
		<initMethod name="addClassPattern">
			<arg>"jsf.action.impl"</arg>
			<arg>".*ActionImpl"</arg>
		</initMethod>
	</component>

	<component
		class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister"
	>
		<property name="instanceDef">
			@[E-MAIL ADDRESS DELETED]
		</property>
		<initMethod name="addClassPattern">
			<arg>"jsf.dto"</arg>
			<arg>".*Dto"</arg>
		</initMethod>
	</component>

	<component
		class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister"
	>
		<initMethod name="addClassPattern">
			<arg>"jsf.logic.impl"</arg>
			<arg>".*LogicImpl"</arg>
		</initMethod>
	</component>

	<component
		class="org.seasar.framework.container.autoregister.AspectAutoRegister"
	>
		<property name="interceptor">logicInterceptorChain</property>
		<initMethod name="addClassPattern">
			<arg>"jsf.logic.impl"</arg>
			<arg>".*LogicImpl"</arg>
		</initMethod>
	</component>

	<component
		class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister"
	>
		<initMethod name="addClassPattern">
			<arg>"jsf.dao"</arg>
			<arg>".*Dao"</arg>
		</initMethod>
	</component>

	<component
		class="org.seasar.framework.container.autoregister.AspectAutoRegister"
	>
		<property name="interceptor">daoInterceptorChain</property>
		<initMethod name="addClassPattern">
			<arg>"jsf.dao"</arg>
			<arg>".*Dao"</arg>
		</initMethod>
	</component>

</components>


==============================
allaop.dicon
==============================
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
	"http://www.seasar.org/dtd/components21.dtd">
<components>
	<include path="aop.dicon"/>
	<include path="dao.dicon"/>
	<include path="j2ee.dicon"/>

	<component
		name="actionThrowsInterceptor"
		class="jsf.interceptor.ActionThrowsInterceptor"
	/>

	<component
		name="actionInterceptorChain"
		class="org.seasar.framework.aop.interceptors.InterceptorChain"
	>
		<initMethod name="add"><arg>aop.traceInterceptor</arg></initMethod>
		<initMethod name="add"><arg>actionThrowsInterceptor</arg></initMethod>
	</component>

	<component
		name="logicInterceptorChain"
		class="org.seasar.framework.aop.interceptors.InterceptorChain"
	>
		<initMethod name="add"><arg>aop.traceThrowsInterceptor</arg></initMethod>
		<initMethod name="add"><arg>aop.traceInterceptor</arg></initMethod>
		<initMethod name="add"><arg>j2ee.requiredTx</arg></initMethod>
	</component>

	<component
		name="daoInterceptorChain"
		class="org.seasar.framework.aop.interceptors.InterceptorChain">
		<initMethod name="add"><arg>aop.traceInterceptor</arg></initMethod>
		<initMethod name="add"><arg>dao.interceptor</arg></initMethod>
	</component>

</components>





Seasar-user メーリングリストの案内