Hello,

I have a table containing numbers and a link: "Add New".
When the user clicks on the link, a new number will be added to the table.


The problem I have is:
If I have the link outside the table, the number will be added to the list and the table will be refreshed properly.

At the other hand, when I place the command link inside the table, the number will be added to the list, but the table is not refreshed with the new value.

I only noticed this behaviour when I am using it with dialogs. If I just use an ActionEvent instead of a ReturnEvent, it works fine.

This is just a simple example that I prepared to point out the issue, but of course in the real application I do have values that I am passing and retrieving from the dialog.

I also pasted the code below.


Thank you in advance.
Regards,
Magdolna




Example.xhtml:
       <tr:commandLink id="cmdOut" text="Add New"
useWindow="true" windowWidth="300" windowHeight="400"
                       partialSubmit="true" action="dialog:numDialog"
                       returnListener="#{exampleBean.numDialogReturned}"/>
       <tr:table id="data" value="#{exampleBean.numList}" var="data"
               partialTriggers="cmdIn cmdOut" width="20%">
           <tr:column id="userAction" headerText="User Action">
               <tr:commandLink id="cmdIn" text="Add New"
useWindow="true" windowWidth="300" windowHeight="400" partialSubmit="true" action="dialog:numDialog" returnListener="#{exampleBean.numDialogReturned}"/>
           </tr:column>
           <tr:column id="num" headerText="Number">
                <tr:outputText value="#{data}"/>
           </tr:column>
       </tr:table>

ExampleBean.java:
   private List<Integer> numList;
   private int num = 100;

   public List<Integer> getNumList() {
       if (numList == null) {
           numList = new ArrayList();
       }
       System.out.println("numList: ("+numList.size()+"): "+numList);
       return numList;
   }
   public void numDialogReturned(ReturnEvent event) {
       System.out.println("--- RETURN");
       Boolean isAdd = (Boolean)event.getReturnValue();
       if (isAdd)
           numList.add(new Integer(num++));
   }

   // DIALOG
   public void performOK(ActionEvent e) {
       logger.debug("Click OK ");
       RequestContext.getCurrentInstance().returnFromDialog(true,null);
   }
   public void performCancel(ActionEvent e) {
       logger.debug("Click Cancel ");
       RequestContext.getCurrentInstance().returnFromDialog(false,null);
   }

NumDialog.xhtml
   <tr:form>
       <tr:panelFormLayout labelWidth="40%">
          <tr:panelButtonBar>
<tr:commandButton text="OK" actionListener="#{equipmentDetailBean.performOK}"/> <tr:commandButton text="Cancel" immediate="true" actionListener="#{equipmentDetailBean.performCancel}"/>
          </tr:panelButtonBar>
       </tr:panelFormLayout>
   </tr:form>

_________________________________________________________________
Discover Live.ca, the search engine by the creators of Windows Live Messenger http://www.live.com/?mkt=en-ca

Reply via email to