Richard Wallace wrote:
Ok, I was wrong. You do need to also change the setValue() method. I'm not sure about the best way to do this, so I just assumed it would be a value binding and everything works as it should:Martin Marinschek wrote:On closer inspection I think I see why it is in the tag class rather than the component itself. It uses the UIComponentTag.isValueReference() to determine if the value attribute is a value binding or not. I think that should be fine where it is, so just adding a setProperty(String) method and creating a value binding from that will work. I tested it in my own app by subclassing UpdateActionListener and adding the method. Works as it should. Attached is a patch of UpdateActionListener and UpdateActionListenerTag to add the setProperty(String) method and create the value binding and in the tag class to just pass along the string value to the component rather than create the value binding there. I'm open to comments/criticisms.I was already wondering myself. It would fit better in the component, if there is one.Manfred? @Rich: Can you do a patch - would be great.Rich
public void setValue (Object value) {
setValueBinding (FacesContext.getCurrentInstance
().getApplication ().createValueBinding (value.toString ()));
}
regards, Martin On 4/19/06, Richard Wallace <[EMAIL PROTECTED]> wrote:I'm trying to make use of the Tomahawk updateActionListener actionlistener in a Shale Clay based app and was having problems getting it towork properly. After doing some debugging I realized that the problem was that I was trying to map to the property "property" on the UpdateActionListener class thinking that the tag "property" attribute just passed the value through. On closer inspection I realized this isn't the case and that the UpdateActionListenerTag itself takes the value set for the "property" attribute and creates a value binding which is passed to the UpdateActionListener with the setPropertyBinding() method. Similarly,the UpdateActionListenerTag also figures out if the "value" attribute issupposed to be an actual value object or a value binding. I searched this list and this was also a problem when trying tointegrate with Facelets. So my question is why is all this work done in the UpdateActionListenerTag class instead of in the UpdateActionListenerclass itself? Then the tag class would just pass the values through like all the other tags in JSF. Rich-- http://www.irian.at Your JSF powerhouse - JSF Consulting, Development and Courses in English and German Professional Support for Apache MyFaces------------------------------------------------------------------------ Index: src/main/java/org/apache/myfaces/custom/updateactionlistener/UpdateActionListenerTag.java =================================================================== --- src/main/java/org/apache/myfaces/custom/updateactionlistener/UpdateActionListenerTag.java (revision 395279) +++ src/main/java/org/apache/myfaces/custom/updateactionlistener/UpdateActionListenerTag.java (working copy) @@ -79,7 +79,7 @@ FacesContext facesContext = FacesContext.getCurrentInstance(); Application application = facesContext.getApplication(); UpdateActionListener al = new UpdateActionListener(); - al.setPropertyBinding(application.createValueBinding(_property)); + al.setProperty(_property); if (UIComponentTag.isValueReference(_value)) { al.setValueBinding(application.createValueBinding(_value)); Index: src/main/java/org/apache/myfaces/custom/updateactionlistener/UpdateActionListener.java =================================================================== --- src/main/java/org/apache/myfaces/custom/updateactionlistener/UpdateActionListener.java (revision 395279) +++ src/main/java/org/apache/myfaces/custom/updateactionlistener/UpdateActionListener.java (working copy) @@ -68,6 +68,11 @@ private ValueBinding _valueBinding; private Converter _converter;+ public void setProperty (String property) {+ setPropertyBinding (FacesContext.getCurrentInstance ().getApplication ().createValueBinding (property));+ } ++ public void setPropertyBinding(ValueBinding propertyBinding) { _propertyBinding = propertyBinding;

