グリッドの各行に使用しているクラスがあります。これは、複数のエンティティ データの組み合わせです。問題はどこに置くか?クラスをコンポーネント パッケージに配置してページ内でインスタンス化し、注入されたサービスからクラスを返し、ページ POJO 内でクラスをネストしようとしました。いずれの場合も、一度は機能し、更新すると次のエラーが発生します。
Failure writing parameter 'row' of component admin/Add:grid.rows: Failure writing parameter 'row' of component admin/Add:grid: Could not find a coercion from type com.foo.bar.pages.admin.Add$RolesRow to type com.foo.bar.pages.admin.Add$RolesRow.
私が考えることができるのは、役に立たないエラーです。Tapestry がすべての依存関係を注入することを望んでいることは理解していますが、その場でインスタンス化するクラスを注入するためにどのパターンを使用すればよいかわかりません。
編集:ここにクラスがあります
public static class RolesRow{
@Property public Boolean ROLE_SUPER;
@Property public Boolean ROLE_ADMIN;
@Property public Boolean ROLE_USER;
@Property public Boolean ROLE_VIEW;
@Property public Boolean ROLE_EMAIL;
private Map<String,Role> roles;
public RolesRow(){
}
public RolesRow(Map<String,Role> roles){
ROLE_SUPER = (roles.containsKey("ROLE_SUPER") ? true:false);
ROLE_ADMIN = (roles.containsKey("ROLE_ADMIN") ? true:false);
ROLE_USER = (roles.containsKey("ROLE_USER") ? true:false);
ROLE_VIEW = (roles.containsKey("ROLE_VIEW") ? true:false);
ROLE_EMAIL = (roles.containsKey("ROLE_EMAIL") ? true:false);
this.roles = roles;
}
public List<Role> selected(){
List<Role> r = new ArrayList<Role>();
checked(r,"ROLE_SUPER",ROLE_SUPER);
checked(r,"ROLE_ADMIN",ROLE_ADMIN);
checked(r,"ROLE_USER",ROLE_USER);
checked(r,"ROLE_VIEW",ROLE_VIEW);
checked(r,"ROLE_EMAIL",ROLE_EMAIL);
return r;
}
private void checked(List<Role> r,String field,Boolean obj){
if (obj !=null && obj == true){
r.add(roles.get(field));
}
}
setupRender でレコードをインスタンス化しています。
void setupRender(){
List<RolesRow> list = new ArrayList<RolesRow>();
list.add(new RolesRow());