You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by bu...@apache.org on 2004/09/19 23:54:04 UTC

DO NOT REPLY [Bug 31303] New: - Custom Binding

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=31303>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=31303

Custom Binding

           Summary: Custom Binding
           Product: Cocoon 2
           Version: 2.1.5
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Enhancement
          Priority: Other
         Component: blocks
        AssignedTo: dev@cocoon.apache.org
        ReportedBy: lucien@wellernet.ch


In the forms binding frame work you can define a cutom binding class by 
extending org.apache.cocoon.forms.AbstractCustomBinding and implementing 
methods foLoad() and doSave().

This is nice but I think there is a little design issue in class 
org.apache.cocoon.forms.CustomJXPathBinding. Look at following case:

* Take a JavaBean with a other bean as property named test
* Make a custom binder that loads an sets this property from the JavaBean with 
implementation:

doLoad(Widget frmModel, JXPathContext jxpc) {
    jxpc.setLenient(true);
    Object aValue = jxpc.getValue(".");
    jxpc.setLenient(false);
    if(aValue != null)
        frmModel.setValue(jxpc.getValue(".").toString());
}

doSave(Widget frmModel, JXPathContext jxpc) {
    jxpc.setValue(".", LookupUtil.lookupValue(frmModel.getValue()));
}

and in binding xml:

<fb:custom id="test" path="test" class="ch.wellernet.MyCustomBinding"/>

This runs very well if test property isn't null. But is it is null an execption 
is throw before the code in MyCustomBinding is executed (in 
CustomJXPathBinding, line 68 on load, 83 on save) because relative context 
cannot be cerate for a null value!

So I changed the AbstractCustomBinding as like this:

protected abstract void doLoad(Widget frmModel, JXPathContext context, String 
path) throws BindingException;

protected abstract void doSave(Widget frmModel, JXPathContext context, String 
path) throws BindingException;

So I class the doXXX methods with parent context and the selection path, so it 
is possible to handle the null case in custom implementation.

Hope this will help some one in cocoon team (and thanks a lot for your good 
work).