0 Replies Latest reply on Oct 4, 2006 11:02 AM by Jens Weintraut

    Outjection problem(s)

    Jens Weintraut Apprentice

      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?