Parameters binding mismatch
---------------------------

                 Key: WW-2218
                 URL: https://issues.apache.org/struts/browse/WW-2218
             Project: Struts 2
          Issue Type: Bug
          Components: Value Stack
    Affects Versions: 2.0.9
            Reporter: Vladimir A. Balandin


Parameters binding don't work properly in case:

interface SomeInterface<T extends Serializable> {
    void setValue(T value);
    T getValue();
}

class SomeAction implements SomeInterface<Integer>{
    Integer value;
    void setValue(Integer value) {
        this.value = value;
    }
    Integer getValue() {
       return value;
    }
    public String execute() {
        System.out.println("value: " + value);
        return "success";
    }
}

Attribute "value" which posted from form would be null always.

Other example:

import ognl.Ognl;
import ognl.OgnlContext;
import com.opensymphony.xwork2.util.OgnlValueStack;

import java.io.Serializable;

public class OGNLDebug {
    public static void main(String[] argv) {
        Result result = new Result();
        OgnlValueStack stack = new OgnlValueStack();
        stack.push(result);
        stack.setValue("example.param", "0");
        stack.setValue("brokenExample.param", "0");

        System.out.println("example.param: " + result.getExample().getParam() );
        System.out.println("brokenExample.param: " + 
result.getBrokenExample().getParam() );
    }
}

class Result {
    private Example example = new Example();

    private BrokenExample brokenExample = new BrokenExample();

    public Result() {
    }

    public Example getExample() {
        return example;
    }

    public void setExample(Example example) {
        this.example = example;
    }

    public BrokenExample getBrokenExample() {
        return brokenExample;
    }

    public void setBrokenExample(BrokenExample brokenExample) {
        this.brokenExample = brokenExample;
    }
}

class Example {
    private Integer param;

    public Integer getParam() {
        return param;
    }

    public void setParam(Integer param) {
        this.param = param;
    }
}

interface Cracker<T extends Serializable>{
    T getParam();
    void setParam(T param);
}

class BrokenExample implements Cracker<Integer>{
    private Integer param;

    public Integer getParam() {
        return param;
    }

    public void setParam(Integer param) {
        this.param = param;
    }
}

*Expected result*
example.param: 0
brokenExample.param: 0

*Actual result*
example.param: 0
brokenExample.param: null

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to