I started to experiment with Seam (1.1) and while I modify some examples, it's all
fine. Later I started to create simple application with list page and detail page, where
list is based on Booking demo. Now I tried to handle list/detail/save/delete situations
with one action bean. So I have three classes - entity, interface and action itself.
action class:
| @Stateful(name = "ProjectManagerActionEJB")
| @Name("projectManager")
| @Scope(ScopeType.SESSION)
| public class ProjectManagerAction implements ProjectManager {
| @PersistenceContext
| private EntityManager em;
| ...
| @DataModel
| private List<Project> projects;
|
| @DataModelSelection
| @In(required = false)
| @Out(required = false)
| private Project project;
|
| public String find() {
| queryProjects();
| return "/main";
| }
|
| private void queryProjects() {
| String searchPattern = searchString == null ? "%" : '%' +
searchString.toLowerCase().replace('*', '%') + '%';
| projects = em.createQuery("select p from Project p where lower(p.name)
like :search or lower(p.code) like :search")
| .setParameter("search", searchPattern)
| .getResultList();
| }
|
| public String getSearchString() {
| return searchString;
| }
|
| public void setSearchString(String searchString) {
| this.searchString = searchString;
| }
|
| public String detail() {
| return "/detail";
| }
|
| public String save() {
| System.out.println("save project = " + project);
| Project updatedProject = em.find(Project.class, project.getId());
| em.merge(project);
| System.out.println("updated project = " + updatedProject);
| em.merge(updatedProject);
| queryProjects();
| return "/main";
| }
|
| public String cancel() {
| return "/main";
| }
|
| public String delete() {
| Project deletedProject = em.find(Project.class, project.getId());
| em.remove(deletedProject);
| queryProjects();
| return "/main";
| }
|
| @Destroy @Remove
| public void destroy() {
| }
| }
|
Detail is fine - proper project is selected. Delete also works, because project with
proper id somehow gets into the action. Save is not working, because values from form are
not put into that project field (original project without changes is still there).
detail.xhtml snippet:
| <ui:define name="content">
| <!--<a:outputPanel id="searchResults">-->
| <div class="section">
| <h:outputText value="No Project Found" rendered="#{project !=
null}"/>
| <h:form>
| <div class="entry">
| <div class="label">
| <h:outputLabel for="code">Code:</h:outputLabel>
| </div>
| <div class="input">
| <h:inputText id="code" value="#{project.code}"
required="true"/>
| </div>
| </div>
| <div class="entry">
| <div class="label">
| <h:outputLabel for="name">Name:</h:outputLabel>
| </div>
| <div class="input">
| <h:inputText id="name" value="#{project.name}"
required="true"/>
| </div>
| </div>
| <div class="entry">
| <div class="label">
| <h:outputLabel
for="description">Description:</h:outputLabel>
| </div>
| <div class="input">
| <h:inputTextarea id="description"
value="#{project.description}" required="false"/>
| </div>
| </div>
| <div class="entry">
| <div class="label">
| <s:link value="Delete" action="#{projectManager.delete}"
buttonClass="button" linkStyle="button"/>
| </div>
| <div class="input">
| <s:link value="Ok" action="#{projectManager.save}"
buttonClass="button" linkStyle="button"/> 
| <s:link value="Cancel" action="#{projectManager.cancel}"
buttonClass="button" linkStyle="button"/>
| </div>
| </div>
| </h:form>
| </div>
| </ui:define>
|
Now... in original example there were used commandButton for "Ok", but I had a
problem to navigate back to "/main" with this (s:link worked fine from the
start).
I'm pretty sure that I made some naive errors because I'm still in the process of
studying JPA/JFC/Seam tricombination. Anyway, here are my questions:
- Is it viable to handle list/detail with single action bean?
- What should I do if I want to obtain project still bound to persistence session in
save/delete? (Minor problem, I can still select/change the project.)
Thanks for hints ;-)
Richard "Virgo" Richter
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3984913#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...