[jboss-user] [JBoss Seam] - Re: Trouble with @DataModelSelection
henrik.lindberg
do-not-reply at jboss.com
Fri Mar 23 18:37:11 EDT 2007
Here is the action bean:
| @Stateful
| @Scope(SESSION)
| @Name("userSpaces")
| @TransactionAttribute(REQUIRED)
| @Restrict("#{s:hasRole('user')}") // Forces check that user is logged in
| public class UserSpacesAction implements UserSpacesLocal, Serializable
| {
|
| private static final long serialVersionUID = -3722438832731142648L;
|
| @PersistenceContext
| private EntityManager em;
|
| @In("currentUser")
| private User m_currentUser;
|
| private String m_spaceInput;
|
| @SuppressWarnings("unused")
| @DataModel("availableSpaces")
| private List<PublishingSpace> m_availableSpaces;
|
| @SuppressWarnings("unused")
| @DataModelSelection
| @Out(required = false)
| private PublishingSpace selectedSpace;
|
|
| private String m_first;
| private static int PAGESIZE = 10;
|
| @Logger
| private Log log;
|
| @SuppressWarnings("unchecked")
| @Factory("availableSpaces")
| public void getAvailableSpaces()
| {
| log.debug("Get User space for user #0", m_currentUser.getLogin());
|
| m_availableSpaces = em.createQuery(
| "SELECT DISTINCT s.publishingSpace FROM SpaceAccess s WHERE s.theUser = :user").setParameter("user",
| m_currentUser).getResultList();
|
| log.debug("Got a List back empty=#0", Boolean.valueOf(m_availableSpaces.isEmpty()));
| }
| public PublishingSpace getSelectedSpace()
| {
| return selectedSpace;
| }
| public void setSelectedSpace(PublishingSpace space)
| {
| selectedSpace = space;
| }
| public String addSpace()
| {
| // create the full "public.xxx" name and check that it is a
| // valid space name
| //
| String tmpSpace = "public."+m_spaceInput;
| if(!SpaceNameValidator.isSpaceNameValid(tmpSpace))
| {
| FacesMessages.instance().add("spaceInput", "Invalid space name");
| return null;
| }
| // Check if space exists
| //
| if(PublishingSpace.exists(em, tmpSpace))
| {
| FacesMessages.instance().add("spaceInput", "Space name already taken - use something else.");
| return null;
| }
|
| // Add objects
| //
| log.debug("Adding space for public.#0", m_spaceInput);
| PublishingSpace p = new PublishingSpace("public."+m_spaceInput);
| p.setDateAdded(new Date());
| SpaceAccess sa = new SpaceAccess(m_currentUser,p, Boolean.TRUE);
| em.persist(p);
| em.persist(sa);
| log.info("Added space #0 for user #1", p.getSpaceName(), m_currentUser.getLogin());
| getAvailableSpaces();
| lastPage();
| // Clear this value for new input
| m_spaceInput = "";
| return null;
| }
|
| public void setSpaceInput(String space)
| {
| m_spaceInput = space;
| }
|
| public String getSpaceInput()
| {
| return m_spaceInput;
| }
| public void select(PublishingSpace space)
| {
| selectedSpace = space;
| log.info("selectedSpace=", space == null ? "null" : space.getSpaceName());
| }
| public String nextPage()
| {
| System.err.print("NEXT PAGE first="+m_first);
| if(m_availableSpaces != null)
| {
| int tmp = getIntFirst() + PAGESIZE;
|
| if(tmp <= m_availableSpaces.size())
| setIntFirst(tmp);
| }
| return null;
| }
| public String prevPage()
| {
| setIntFirst(Math.max(0, getIntFirst() - PAGESIZE));
| return null;
| }
| public String firstPage()
| {
| setIntFirst(0);
| return null;
| }
| public String lastPage()
| {
| if(m_availableSpaces != null)
| {
| int lastIdx = m_availableSpaces.size() -1;
| if(lastIdx >= 0)
| {
| int tmp = lastIdx / PAGESIZE;
| setIntFirst(tmp * PAGESIZE);
| }
| }
| return null;
| }
| public String getFirst()
| {
| return m_first == null ? "0" : m_first;
| }
| public void setFirst(String first)
| {
| m_first = first;
| }
| private void setIntFirst(int first)
| {
| m_first = String.valueOf(first);
| }
| private int getIntFirst()
| {
| return (m_first == null ? 0 :
| Integer.parseInt(m_first));
| }
| public int getPageSize()
| {
| return PAGESIZE;
| }
| @Destroy
| @Remove
| public void destroy()
| {
| System.out.print("USERSPACES-ACTION - destroyed");
| }
| }
|
I experimented with some getters and setters of the data selection - but it did not make a difference - does not work either way.
Also, it does not matter if I use the "addSpace" method to add new things - if I just render objects already in the database I have the same problem.
The pagination code is there to support a view that is not converted to use a datascrooller/paginator.
In this version of the select method I try to pass the selected thing as a parameter from the facelet. My previous attempt did not use that - it produced the same result.
Will now post the remaining parts.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4031238#4031238
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4031238
More information about the jboss-user
mailing list