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#3984913
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3984913
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user