take a look at rendered="#{categoryAdmin.updateMode}" which must be true to process the actionlistener when the request is decoded. Save the state of categoryAdmin with t:savestate or make the bean session scope.

Hope that helps.

Regards,
Mathias

Gregg D Bolinger schrieb:
FYI - the missing # from the actionListener in
<x:commandButton id="updateButton"
actionListener="{categoryAdmin.update}" value="Update"
rendered="#{categoryAdmin.updateMode}"/>

was corrected as I was typing in a hurry. The problem still persists. Thanks for any help. And I am using MyFaces 1.0.9. Using the latest
nightly snapshot did not resolve this issue  either.

Gregg

On 8/11/05, Gregg D Bolinger <[EMAIL PROTECTED]> wrote:

I'm not sure if this is an issue with MyFaces or with how I am doing
what I am doing or what.  I have a very simple page with a a
dataTable.  I am wanting to edit the data in the dataTable inline.
That is to say, not navigating to a seperate page.  I have it setup
with an edit button for each item and when that button is pressed I
render inputText components and an update button for the associated
row.  This works.

The problem is that the update button's actionListener method binding
isn't working.  When I press the update button, nothing happens.  The
update(ActionEvent event) method is never called.  It doesn't matter
if the bean is in the session or request. It just doesn't call the
method.  I have stripped the code down to the simplest working example
that demonstrates this problem which I will post below.  As it is
right now, I am merely showing and hiding the update/edit buttons.
When I press Edit the edit method is being called and the update
button is rendered where the edit button is now not rendered.  If I
hit update button, the update method is never called and the edit
button is displayed again, hiding the update button.  I realize that
with each button press a new request is being sent to the server.
However, it JSF is supposed to save the state of the bean for
actionListeners since it does not navigate from the page. However, I
don't believe this is working correctly.  Any ideas?  Thanks.

<f:view>
<html>
 <head><title>Simple jsp page</title></head>
 <body>
 <jsp:include page="includes/admin_header.jsp"/>
 <h:form>
   <x:dataTable var="cat" binding="#{categoryAdmin.categoryData}"
value="#{categoryAdmin.categoryList}" border="1"
forceIdIndex="#{cat.categoryId}" >
       <h:column>
           <f:facet name="header">
               <h:outputText value="Description" />
           </f:facet>
           <h:outputText value="#{cat.description}"/>
       </h:column>
       <h:column>
           <f:facet name="header">
               <h:outputText value="Cost"/>
           </f:facet>
           <h:outputText value="#{cat.cost}"/>

       </h:column>
       <h:column>
           <x:commandButton id="editButton"
actionListener="#{categoryAdmin.edit}" value="Edit" rendered="#{not
categoryAdmin.updateMode}" />
           <x:commandButton id="updateButton"
actionListener="{categoryAdmin.update}" value="Update"
rendered="#{categoryAdmin.updateMode}"/>
       </h:column>
       <h:column>
           <x:commandButton actionListener="#{categoryAdmin.delete}"
value="Delete"/>
       </h:column>
   </x:dataTable>
   <f:verbatim><br/></f:verbatim>

   <h:panelGrid columns="2" border="1">
       <h:outputText value="Description"/>
       <h:inputText value="#{categoryAdmin.category.description}" />
       <h:outputText value="Cost"/>
       <h:inputText value="#{categoryAdmin.category.cost}"/>
       <h:commandButton actionListener="#{categoryAdmin.add}" value="Save"/>
       <h:commandButton actionListener="#{categoryAdmin.cancel}"
value="Cance"/>
   </h:panelGrid>


 </h:form>
 </body>
</html>
</f:view>

public class CategoryAdmin extends BaseBean implements Serializable {

   private List categoryList;
   private UIData categoryData;
   private boolean updateMode = false;

   private Category category;

   public List getCategoryList() {
       CategoryService catService =
(CategoryService)getAppContext().getBean("categoryService");
       categoryList = catService.getall();
       return categoryList;
   }

   public void setCategoryList(List categoryList) {

       this.categoryList = categoryList;
   }

   public UIData getCategoryData() {


       return categoryData;
   }



   public void setCategoryData(UIData categoryData) {
       this.categoryData = categoryData;
   }

   public boolean isUpdateMode() {
       return updateMode;
   }

   public void setUpdateMode(boolean updateMode) {
       this.updateMode = updateMode;
   }

   public Category getCategory() {
       if (category == null){
           category = new Category();
       }
       return category;
   }

   public void setCategory(Category category) {
       this.category = category;
   }

   public void edit(ActionEvent event){
       System.out.println("Edit");
       category = (Category)categoryData.getRowData();
       category.setEditable(true);
       setUpdateMode(true);
   }

   public void update(ActionEvent event){
       System.out.println("Updating");
   }



   public void delete(ActionEvent event){


       CategoryService catService =
(CategoryService)getAppContext().getBean("categoryService");
       Category cat = (Category)categoryData.getRowData();
       catService.delete(cat);
       setCategoryList(catService.getall());


   }

   public void add(ActionEvent event){
       System.out.println("Adding");

       CategoryService catService =
(CategoryService)getAppContext().getBean("categoryService");
       catService.insert(getCategory());

   }

   public void cancel(ActionEvent event){

   }

   public void changeAddMode(ActionEvent event){
       System.out.println("Changing Add Mode");

   }
}

Reply via email to