It's exactly CRUD what I'd like to do.
I used Seam-gen to setup the project and to create my forms (originaly).
here us my current code (slightly simplified)
*** person.java ***
@Entity
@Name("person")
public class person implements Serializable {
private Long id;
private String name;
private String firstName;
@Id
@GeneratedValue
public Long getId() {..}
public void setId(Long id) {..}
@Length(min=3, max=120)
public String getName() {..}
public void setName(String name) {..}
public String getFirstName() {..}
public void setFirstName(String firstName) {..}
*** PersonManagerBean.java ***
@Stateful
@Scope(ScopeType.SESSION)
@Name("personManager")
public class PersonViewerBean implements PersonManager {
@Logger
private Log log;
@In(required=false)
@Out
private List personList;
@DataModel
private List personsDataModel;
@DataModelSelection
@Out(required=false)
private Person person;
@PersistenceContext(type=PersistenceContextType.EXTENDED)
private EntityManager em;
@Factory("personsDataModel")
public void findPersons() {
personsDataModel = em.createQuery("from Person r order by r.name
desc").getResultList();
personList = personssDataModel;
}
@Remove @Destroy
public void destroy(){}
}
*** EditPersonBean ***
@Stateful
@Name("editperson")
public class EditpersonBean implements Editperson {
@Logger
private Log log;
@PersistenceContext(type=PersistenceContextType.EXTENDED)
private EntityManager em;
@In
FacesMessages facesMessages;
@In(required=false)
@Out
private Person person;
@In
@Out
private List personList;
@Begin
public void newPerson() {
person = new person();
}
@End
public void savePerson()
{
List existing = new ArrayList();
existing = em.createQuery("select name from Person where
name=#{person.name}").getResultList();
if (existing == null || existing.size() == 0) {
em.persist(person);
personList.add(person);
}
else {
facesMessages.add("a person with this name already exists!
(name=#{person.name})");
}
}
@End
public void updateperson()
{
em.persist(person);
}
@Begin
public void editperson(person r) {
this.person = em.merge(r);
}
public person getperson() { ..}
public void setperson(person person) {...}
@Remove @Destroy
public void destroy(){}
}
****** view.xhtml ******
...
<rich:panel>
<f:facet name="header">Welcome!</f:facet>
MY PERSON:
<h:outputText value="nothing to display"
rendered="#{personsDataModel.rowCount==0}" />
<h:dataTable var="person" value="${personsDataModel}"
rendered="#{personsDataModel.rowCount>0}">
<h:column>
<f:facet name="header">
<h:outputText value="Name" />
</f:facet>
<h:commandLink value="#{person.name}"
action="#{personManager.select}" /> <!-- action does nothing -->
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Vorname" />
</f:facet>
<h:commandLink value="#{person.firstName}"
action="#{personManager.select}" />
</h:column>
<h:column>
<s:link id="editperson" value="edit"
action="#{editperson.editPerson(person)}" />
</h:column>
</h:dataTable>
<h:commandButton value="refresh"
action="#{personManager.findPersons}" />
<h:commandButton value="new entry"
action="#{editperson.newPerson}" />
<h3><h:outputText value="#{rower.email}" /></h3>
</rich:Panel>
...
***** edit.xhtml ****
....
<rich:panel>
<f:facet name="header">editPerson</f:facet>
<s:decorate id="firstnameDecoration"
template="layout/edit.xhtml">
<ui:define name="label">Vorname</ui:define>
<h:inputText id="firstname" required="false"
value="#{person.firstName}" />
</s:decorate>
<s:decorate id="nameDecoration"
template="layout/edit.xhtml">
<ui:define name="label">Name</ui:define>
<h:inputText id="name" required="true"
value="#{person.name}"/>
</s:decorate>
...
***************************
Logging, Comments, some other stuff was left out.
when pressing the 'new' or 'edit' Button a new conversation starts and my
List (personList) is copied into the conversation-context. At the end of the conversation
I'd like to copy it back to the Session.personList.
How? possible? did I missunderstand something?
thanks
Daniel
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4062623#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...