最近在学习seam框架,遇到一个问题:
在用rich:dataTable中有一个集合,集合中包含另一个集合,h:selectManyCheckbox 就是另一个集合迭代出来的具体权限
用户在勾选需要的权限提交数据,后台接收不到这个集合中集合的值。这个问题要怎么解决?
- Java code
<rich:dataTable id="oaResourceList" value="#{oaResourceList.resultList}" var="oaResource"> <rich:column sortOrder="ASCENDING" sortBy="#{oaResource.resourceName}"> <f:facet name="header"> <h:outputText value="资源名" /> </f:facet> <h:outputText value="#{oaResource.resourceName}" /> </rich:column> <rich:column> <f:facet name="header"> <h:outputText value="操作名" /> </f:facet> <h:selectManyCheckbox value="#{oaRoleHome.opers}"> <s:selectItems value="#{oaResource.opers}" var="oaResourceOper" label="#{oaResourceOper.operName}"/> <s:convertEntity/> </h:selectManyCheckbox> </rich:column> </rich:dataTable>
- Java code
package org.jboss.oa.session;import java.util.ArrayList;import java.util.List;import org.jboss.seam.annotations.Name;import org.jboss.seam.annotations.Begin;import org.jboss.seam.annotations.web.RequestParameter;import org.jboss.seam.framework.EntityHome;import org.jboss.oa.entity.OaPermission;import org.jboss.oa.entity.OaResourceOper;import org.jboss.oa.entity.OaRole;@Name("oaRoleHome")public class OaRoleHome extends EntityHome<OaRole>{ /** * */ private static final long serialVersionUID = 3857626513412738271L; @RequestParameter Long oaRoleId; private List<OaResourceOper> opers; private List<OaPermission> perms; private String testStr; @Override public Object getId() { if (oaRoleId == null) { return super.getId(); } else { return oaRoleId; } } /**@功能: @see org.jboss.seam.framework.EntityHome#update() * @author : lh * @2009-4-24 下午03:57:49 */ @Override public String update() { for(OaPermission perm : perms) { getEntityManager().remove(perm); } perms = new ArrayList<OaPermission>(); System.out.println("test:"+testStr); for(OaResourceOper oper : opers) { OaPermission perm = new OaPermission(); perm.setAction(oper.getOperMethod()); perm.setOaResourceOper(oper); perm.setRecipient(instance.getName()); perm.setTarget(oper.getOaResource().getComponentName()); perm.setOaRole(instance); getEntityManager().persist(perm); perms.add(perm); } instance.setOaPermissions(perms); getEntityManager().merge(instance); return super.update(); } /** * @return the opers */ public List<OaResourceOper> getOpers() { return opers; } /** * @param opers the opers to set */ public void setOpers(List<OaResourceOper> opers) { this.opers = opers; } /** * @return the perms */ public List<OaPermission> getPerms() { return perms; } /** * @param perms the perms to set */ public void setPerms(List<OaPermission> perms) { this.perms = perms; } public String getTestStr() { return testStr; } public void setTestStr(String testStr) { this.testStr = testStr; } }