Seam-Gen Sessionlist and the case of RESTRICTIONS for entitqueryic
nmatrix9 Oct 26, 2009 4:56 AMHello Seam Users,
I've just noticed that creates class that extends EntityQuery, some generated classes do NOT have any restrictsion set in the RESTRICTIONS array. I tried to find out why but so far I have not found any useful information on this. Anyways I have a class called ExoshellUsersRolesList that extends EntityQuery (originally generated by Seam-Gen) to which it did not have it's RESTRICTIONS array set. So I decided I would manually set the array myself like so.
package com.domain.exoshellcms.session;
import com.domain.exoshellcms.entity.*;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.framework.EntityQuery;
import java.util.List;
import java.util.Arrays;
@Name("exoshellUserRolesList")
@Scope(ScopeType.SESSION)
public class ExoshellUserRolesList extends EntityQuery<ExoshellUserRoles> {
/* UNABLE TO GET RESTRICTIONS TO WORK WITHOUT POINTING TO NULL PARENT OBJECT I.E. exoshellUsers, exoshellRoles or exoshellModules */
private static final String[] RESTRICTIONS = {
"lower(users.username) like concat(lower(#{exoshellUserRolesList.exoshellUserRoles.exoshellUsers.username}),'%')",
"lower(exoshellUserRoles.exoshellRoles.roleName) like concat(lower(#{exoshellUserRolesList.exoshellUserRoles.exoshellRoles.roleName}),'%')",
"lower(exoshellUserRoles.exoshellModules.moduleName) like concat(lower(#{exoshellUserRolesList.exoshellUserRoles.exoshellModules.moduleName}),'%')"
};
private ExoshellUserRoles exoshellUserRoles = new ExoshellUserRoles();
private String queryString = new String("select exoshellUserRoles, users from ExoshellUserRoles exoshellUserRoles join fetch exoshellUserRoles.exoshellUsers users");
@Override
public String getEjbql() {
return queryString;
}
public ExoshellUserRoles getExoshellUserRoles() {
return exoshellUserRoles;
}
@Override
public List<String> getRestrictions() {
return Arrays.asList(RESTRICTIONS);
}
@Override
public String getOrder() {
return new String("exoshellUserRoles.userRolesId asc");
}
}
I then created a corresponding interface form to search through a datable using the ExoshellUsersList like so:
<rich:simpleTogglePanel label="User Roles search parameters" switchType="ajax" opened="false" ignoreDupResponses="true" eventsQueue="userSearchQueue" requestDelay="2000" immediate="true" rendered="false">
<s:decorate template="/layout/display.xhtml">
<ui:define name="label">User Name</ui:define>
<h:inputText id="userRoleName" value="#{exoshellUserRolesList.exoshellUserRoles.exoshellUsers.username}">
<a:support event="onblur" reRender="panelusers,userRolesPaginator" ignoreDupResponses="true"/>
</h:inputText>
</s:decorate>
<s:decorate template="/layout/display.xhtml">
<ui:define name="label">Role Name</ui:define>
<h:inputText id="userRoleRolename" value="#{exoshellUserRolesList.exoshellUserRoles.exoshellRoles.roleName}">
<a:support event="onblur"/>
</h:inputText>
</s:decorate>
<s:decorate template="/layout/display.xhtml">
<ui:define name="label">Module</ui:define>
<h:inputText id="userRoleModule" value="#{exoshellUserRolesList.exoshellUserRoles.exoshellModules.moduleName}">
<a:support event="onblur"/>
</h:inputText>
</s:decorate>
</rich:simpleTogglePanel>
Unfortunately this was not enough as when I try to input text into one of the search fields (like User Name) upon ajax update I get the error:
Exception during request processing:
Caused by javax.servlet.ServletException with message: "/admin/ExoshellUserRolesEdit.xhtml @339,122 value="#{exoshellUserRolesList.exoshellUserRoles.exoshellUsers.username}": Target Unreachable, 'exoshellUsers' returned null on 'com.domain.exoshellcms.entity.ExoshellUserRoles'"
Any insight, documentation or solutions to the exception above would be greatly appreciated. I've include the relied upon Seam components/entities below after this post.
I've just noticed that creates class that extends EntityQuery, some generated classes do NOT have any restrictsion set in the RESTRICTIONS array. I tried to find out why but so far I have not found any useful information on this. Anyways I have a class called ExoshellUsersRolesList that extends EntityQuery (originally generated by Seam-Gen) to which it did not have it's RESTRICTIONS array set. So I decided I would manually set the array myself like so.
package com.domain.exoshellcms.session;
import com.domain.exoshellcms.entity.*;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.framework.EntityQuery;
import java.util.List;
import java.util.Arrays;
@Name("exoshellUserRolesList")
@Scope(ScopeType.SESSION)
public class ExoshellUserRolesList extends EntityQuery<ExoshellUserRoles> {
/* UNABLE TO GET RESTRICTIONS TO WORK WITHOUT POINTING TO NULL PARENT OBJECT I.E. exoshellUsers, exoshellRoles or exoshellModules */
private static final String[] RESTRICTIONS = {
"lower(users.username) like concat(lower(#{exoshellUserRolesList.exoshellUserRoles.exoshellUsers.username}),'%')",
"lower(exoshellUserRoles.exoshellRoles.roleName) like concat(lower(#{exoshellUserRolesList.exoshellUserRoles.exoshellRoles.roleName}),'%')",
"lower(exoshellUserRoles.exoshellModules.moduleName) like concat(lower(#{exoshellUserRolesList.exoshellUserRoles.exoshellModules.moduleName}),'%')"
};
private ExoshellUserRoles exoshellUserRoles = new ExoshellUserRoles();
private String queryString = new String("select exoshellUserRoles, users from ExoshellUserRoles exoshellUserRoles join fetch exoshellUserRoles.exoshellUsers users");
@Override
public String getEjbql() {
return queryString;
}
public ExoshellUserRoles getExoshellUserRoles() {
return exoshellUserRoles;
}
@Override
public List<String> getRestrictions() {
return Arrays.asList(RESTRICTIONS);
}
@Override
public String getOrder() {
return new String("exoshellUserRoles.userRolesId asc");
}
}
I then created a corresponding interface form to search through a datable using the ExoshellUsersList like so:
<rich:simpleTogglePanel label="User Roles search parameters" switchType="ajax" opened="false" ignoreDupResponses="true" eventsQueue="userSearchQueue" requestDelay="2000" immediate="true" rendered="false">
<s:decorate template="/layout/display.xhtml">
<ui:define name="label">User Name</ui:define>
<h:inputText id="userRoleName" value="#{exoshellUserRolesList.exoshellUserRoles.exoshellUsers.username}">
<a:support event="onblur" reRender="panelusers,userRolesPaginator" ignoreDupResponses="true"/>
</h:inputText>
</s:decorate>
<s:decorate template="/layout/display.xhtml">
<ui:define name="label">Role Name</ui:define>
<h:inputText id="userRoleRolename" value="#{exoshellUserRolesList.exoshellUserRoles.exoshellRoles.roleName}">
<a:support event="onblur"/>
</h:inputText>
</s:decorate>
<s:decorate template="/layout/display.xhtml">
<ui:define name="label">Module</ui:define>
<h:inputText id="userRoleModule" value="#{exoshellUserRolesList.exoshellUserRoles.exoshellModules.moduleName}">
<a:support event="onblur"/>
</h:inputText>
</s:decorate>
</rich:simpleTogglePanel>
Unfortunately this was not enough as when I try to input text into one of the search fields (like User Name) upon ajax update I get the error:
Exception during request processing:
Caused by javax.servlet.ServletException with message: "/admin/ExoshellUserRolesEdit.xhtml @339,122 value="#{exoshellUserRolesList.exoshellUserRoles.exoshellUsers.username}": Target Unreachable, 'exoshellUsers' returned null on 'com.domain.exoshellcms.entity.ExoshellUserRoles'"
Any insight, documentation or solutions to the exception above would be greatly appreciated. I've include the relied upon Seam components/entities below after this post.