Seam question regarding @In annotation and request params
mmarcom Jun 7, 2006 9:19 AMhi all,
i have written a small Seam application that resembles a shopping cart. I have a EcontrolSession bean, and two entity beans, Expense and Items.
I am adding items to the expense bean and then i plan to persist the expense via the SessionBean
My question is:
- my Session bean is stateful and has a session scope
- my Expense entity will be a global variable in the EControlSession bean, because it lasts for the lifespan of user session
- My Item will have a request scope because user enters items at every request.
My thought was that . this would have worked
@Stateful
@Local ( {EControlSession.class})
@Name("econtrol")
@Scope(SESSION)
public class EControlSessionBean
implements EControlSession, java.io.Serializable
{
private Expense expense = new Expense();
@In(create=true)
private Item item = new Item();
@PersistenceContext
EntityManager em;
int counter = 0;
/**
* Add an user (Admin only should access this)
*/
public void addExpense (Expense expense) {
System.err.println("Persisting expense");
em.persist(expense);
System.err.println("Expense persisted..");
}
public Expense getExpense() {
return expense;
}
public Item getItem() {
return item;
}
public String add() {
item.setName("test" + 1);
item.setPrice(1);
expense.addItem(item);
return "success";
}
...
and here's my page
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:s="http://jboss.com/products/seam/taglib"
template="template.xhtml">
<ui:define name="body">
<h2> Adding Product</h2>
<h:messages/>
<f:view>
<h:form id="foobrrewwe">
<table>
<tr>
<td>Site:<h:outputText value="#{econtrol.expense.site}"/></td>
<td>Date:<h:outputText value="#{econtrol.expense.date}"/></td>
</tr>
</table>
<table>
<tr>
<td>Product Name</td>
<td><h:inputText value="#{econtrol.item.name}"/></td>
</tr>
<tr>
<td>Price</td>
<td><h:inputText value="#{econtrol.item.price}">
<f:converter converterId="javax.faces.Double"/>
</h:inputText>
</td>
</tr>
</table>
<h:commandButton action="#{econtrol.add}" value="Add Item"
class="formButton" style="width: 166px;" />
<h:commandButton action="#{econtrol.stop}" value="Finish"
class="formButton" style="width: 166px;" />
</h:form>
</f:view>
<h4><a href="register.seam">Back To Index</a></h4>
</ui:define>
</ui:composition>
my assumption was because i thought that @In somehow resolved to a getter and setters, so that the Item object can be populated using
<h:inputText value="#{econtrol.item.price}/>
as i have found out, it does not work that way...
is the only way out for me to declare two @request variable and populate each item with those requet variables?
thanks and regards
marco