It's late, but I'll give this a go. Christian or Pete feel free to jump in.
It sounds like your mixing your retrieval and persistence mechanisms.
@Factory - Method called when a JSF page tries to reference a contextual
variable that doesn't exist, but has a named factory method. So if #{activity}
isn't found and there is a @Factory method, the method will be called and the
contextual variable populated. The variable will have the scope defined by
@Factory or if absent, the scope of the enclosing component. @Factory is only
called if the contextual variable is null (needs to be created).
@Unwrap - Method called on a component that allows the component to manage the
creation of a contextual variable. So Component ActivityManager might have an
@Unwrap method that puts an Activity into scope referenceable by the EL
#{activity}. This method will be called every time the #{activity} variable is
referenced or injected into a bean. Because the @Unwrap annotation is on a
method within a Seam Component, the component can take advantage of the entire
Seam life cycle, including providing tear down logic.
EntityHome - These are classes the provide generic DAO capabilities to objects.
By using an EntityHome you can Create, Update, Delete a single entity via its
primary key. In order to Update or Delete with an EntityHome you must pass the
ID of the object to the EntityHome prior to calling update or remove.
EJB3 Entity Beans - Seam components that are EJB3 Entity Beans are
automatically registered as event scoped components. They have an implicit
auto-create when used with JSF pages. So you could @Name("activity") your
Activity EJB3 entity bean. And reference it in your JSF page as #{activity}.
Seam will call the default constructor and you'll be able to use EL to set
values and can inject @In("activity") into the controller that deals with the
form action. Beans can have multiple names, and multiple scopes. Read more
about the @Role/@Roles annotation for more information.
The Seam documentation covers these concepts in greater detail.
If all you want to do is supply simple CRUD operations, then you can use an
EntityHome. By using an EntityHome it becomes your controller (action method),
and thus you don't have to write one. EntityHome can be configured with
FacesMessages to notify your users that CRUD operations have completed.
Remember that in order to use EntityHome for update and remove you need to pass
in an id. The developer guide shows how.
Based on the description you can decide whether @Factory or @Unwrap are best
suited for your needs.
Also, by default JSF will populate an unfilled form with empty values, not
null. So if you're trying to populate your #{activity} entity, have a blank
form and hit submit. Your controller will be injected with a live object with
the form values set to their empty state (empty Strings, 0 ints, etc). If you
want these values to be null instead you'll need to write a custom converter.
I've written a simple one below. Use the converter method or the <f:converter>
tag. The version of MyFaces that ships with JBoss 4.0.5 doesn't seem to want
to let you override the default String converter, so you'll need to specify the
converter on every input component you'd like it on. This might change on the
1.2 RI, I've heard different things about the RI in the 4.2 CVS tree.
@Name("emptytonull")
| @org.jboss.seam.annotations.jsf.Converter(forClass=String.class)
| public class EmptyStringToNullConverter implements Converter, Serializable
| {
| public Object getAsObject(FacesContext arg0, UIComponent arg1, String
arg2) throws ConverterException
| {
| return arg2 == null || arg2.isEmpty() ? null : arg2;
| }
|
| public String getAsString(FacesContext arg0, UIComponent arg1, Object
arg2) throws ConverterException
| {
| return arg2 == null ? "" : arg2.toString();
| }
| }
Hope this helps. I'm going to crash now.
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4039504#4039504
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4039504
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user