[jboss-user] [JBoss Seam] - Outjection problem(s)

Newlukai do-not-reply at jboss.com
Wed Oct 4 11:02:34 EDT 2006


Hi,

I didn't know how to search for this specific problem, so I started a new thread. I hope you don't mind.

I have a form which allows the user to enter some values, which are attached to a bean (called testactionToCreate). As the name says, this form should allow the user to create a new testaction. To specify a testaction the user can choose a testcase from a dropdown-list, but he doesn't need to. But as soon as he chooses a testcase, some fields on the page should be filled with the values of the testcase. Then the user adds some data and submits the form.
That's the idea.

The dropdown-list gets its entries from a stateful bean, the testcaseSelector. In this bean I defined a valueChangeListener which sets some values of the injected testactionToCreate. This works fine. After those values are set, the testactionToCreate is outjected.

Now comes my problem: I only see the attributes set by testcaseSelector if they are displayed in an output field like h:outputText.

Next step would be to save the testactionToCreate. The save method is defined in a third bean, called createTestaction. When the save method is invoked all attributes set by the testcaseSelector are null. And that's a problem, too. But I think it's related to the first problem.

Here is some code:

The entity bean (testactionToCreate):
@Entity
  | @Table(name="TESTACTIONS")
  | @Name("testaction")
  | @Scope(ScopeType.SESSION)
  | public class Testaction implements Serializable, Cloneable {
  | 	private long m_ID;
  | 	//... the attribute list is too long. Ask me, if you need more
  | 	private Long m_TCaseID;
  | 	private Long m_TObjID;

The bean saving the entitiy bean (createTestaction):
@Stateless
  | @LoggedIn
  | @Name("createTestaction")
  | public class CreateTestactionAction implements CreateTestaction, Serializable {	
  | 	@PersistenceContext(unitName = "aresDatabase")
  | 	private EntityManager em;
  | 	
  | 	@In
  | 	@Valid
  | 	private User user;
  | 	
  | 	@Valid
  | 	@In(required=false)
  | 	@Out(required=false)
  | 	private Testaction testactionToCreate;
  | 	
  | 	@In(required=false)
  | 	private Release selectedRelease;
  | 	
  | 	@Factory("testactionToCreate")
  | 	public void initTestactionToCreate() {
  | 		if(testactionToCreate != null) {
  | 			return;
  | 		}
  | 		testactionToCreate = new Testaction();
  | 		testactionToCreate.setTesterUsrID(user.getID());
  | 		testactionToCreate.setValidatorUsrID(user.getID());
  | 	}
  | 	
  | 	@IfInvalid(outcome=Outcome.REDISPLAY)
  | 	public String createTestaction() {
  |                 // do something and return an outcome
  |         }

The bean managing the dropdown-list (testcaseSelector):
@Stateful
  | @Scope(ScopeType.SESSION)
  | @LoggedIn
  | @Name("testcaseSelector")
  | public class TestcaseSelection implements TestcaseSelector, Serializable {
  | 	@PersistenceContext(unitName = "aresDatabase")
  | 	private EntityManager em;
  | 	
  | 	@In(required=false)
  | 	private Release selectedRelease;
  | 	
  | 	@In(required=false) @Out(required=false)
  | 	private Testaction testactionToCreate;
  | 	
  | 	private Long lastSelectedReleaseID;
  | 	
  | 	@In(required=false) @Out(required=false, scope=ScopeType.SESSION)
  | 	private Testcase selectedTestcase; 
  | 	
  | 	private List<Testcase> testcases;
  | 	
  | 
  | 	public void valueChanged(ValueChangeEvent event) {
  | 		setSelectedTestcaseNumber((Long)  event.getNewValue());
  | 		if(selectedTestcase != null && testactionToCreate != null) {
  | 			testactionToCreate.setTObjID(selectedTestcase.getTObjID());
  | 			testactionToCreate.setTCaseToken(selectedTestcase.getToken());
  | 			testactionToCreate.setTCaseDescr(selectedTestcase.getDescr());
  | 		}
  | 	}

And the form:
<h:form>
  | 		<div id="errors"><h:messages layout="table" /></div>
  | 		<div class="buttonLine">
  | 			<h:commandButton action="#{createTestaction.createTestaction}" />
  | 		</div>
  | 		
  | 		<div id="release">
  | 			<h:outputText value="#{ares_messages.filter_release}: " />
  | 			<h:selectOneMenu                 value="#{releaseSelector.selectedReleaseNumberOnly}" onchange="submit()">
  | 				<f:selectItems value="#{releaseSelector.releaseItemsOnly}" />
  | 			</h:selectOneMenu>
  | 		</div>
  | 		
  | 		<table cellpadding="0" cellspacing="0" border="0">
  | 			<tr>
  | 				<th><h:outputText value="#{ares_messages.label_testaction_TesterUsrID}" /></th>
  | 				<th><h:outputText value="#{ares_messages.label_testaction_TCaseID}" /></th>
  | 				<th><h:outputText value="#{ares_messages.label_testaction_TObjID}" /></th>
  | 				<th><h:outputText value="#{ares_messages.label_testaction_QATID}" /></th>
  | 				<th><h:outputText value="#{ares_messages.label_testaction_SevID}" /></th>
  | 				<th><h:outputText value="#{ares_messages.label_testaction_DevUsrID}" /></th>
  | 				<th><h:outputText value="#{ares_messages.label_testaction_CompID}" /></th>
  | 				<th> </th>
  | 			</tr>
  | 			<tr>
  | 				<td>
  | 					<h:selectOneMenu value="#{testactionToCreate.testerUsrID}">
  | 						<f:selectItems value="#{selectMenuHelper.testersWithEmptyEntry}" />
  | 					</h:selectOneMenu>
  | 				</td>
  | 				<td>
  | 					<h:selectOneMenu value="#{testcaseSelector.selectedTestcaseNumber}"
  |  onchange="submit()"
  |  valueChangeListener="#{testcaseSelector.valueChanged}">
  | 						<f:selectItems value="#{testcaseSelector.testcaseItems}" />
  | 					</h:selectOneMenu>
  | 				</td>
  | 				<td><h:outputText value="#{testactionToCreate.TObjID}" /></td>
  | 				<td><h:outputText value="#{testactionToCreate.QATID}" /></td>
  | 				<td>
  | 					<h:selectOneMenu value="#{testactionToCreate.sevID}">
  | 						<f:selectItems value="#{selectMenuHelper.severities}" />
  | 					</h:selectOneMenu>
  | 				</td>
  | 				<td>
  | 					<h:selectOneMenu value="#{testactionToCreate.devUsrID}">
  | 						<f:selectItems value="#{selectMenuHelper.developers}" />
  | 					</h:selectOneMenu>
  | 				</td>
  | 				<td><h:outputText value="#{testactionToCreate.compID}" /></td>
  | 				<td> </td>
  | 			</tr>
  | 		</table>
  | 		
  | 		<table cellpadding="0" cellspacing="0" border="0">
  | 			<tr>
  | 				<th><h:outputText value="#{ares_messages.label_testobject_Token}" /></th>
  | 				<th><h:outputText value="#{ares_messages.label_testaction_TCaseToken}" /></th>
  | 			</tr>
  | 			<tr>
  | 				<td><h:outputText value="pending" /></td>
  | 				<td><h:inputText value="#{testactionToCreate.TCaseToken}" style="width: 100%;" /></td>
  | 			</tr>
  | 		</table>

I tried several SessionTypes (PAGE, EVENT, SESSION and CONVERSATION) for the outjection of the bean testactionToCreate. I tried also to define testactionToCreate as a @Role of Testaction. Anything worked.

Has anybody an idea how to solve this problem?

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3976039#3976039

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3976039



More information about the jboss-user mailing list