Does EL support overloaded methods?

后端 未结 2 1231
再見小時候
再見小時候 2020-11-27 21:03

I upgraded my Java EE web application to use newer PrimeFaces version and suddenly the call of an overloaded bean method in an action attribute of PrimeFaces commandlink did

相关标签:
2条回答
  • 2020-11-27 21:16

    EL does not support it, no. It'll always be the first method of the Class#getMethods() array whose name (and amount of arguments) matches the EL method call. Whether it returns the same method everytime or not depends on the JVM make/version used. Perhaps you made a Java SE upgrade in the meanwhile as well. The javadoc even says this:

    The elements in the array returned are not sorted and are not in any particular order.

    You should not rely on unspecified behaviour. Give them a different name.

    0 讨论(0)
  • 2020-11-27 21:18

    The way you can get around this is to create a generic method and do the 'routing' inside that method. I know that this might not be ideal, but you end up with less configurations in functions and XHTML pages.

    if (A.class.isInstance(obj)) {
        A o = (A) obj;
        return method(o, highRes);
    } else if (B.class.isInstance(obj)) {
        B o = (B) obj;
        return method(o, highRes);
    } else if (C.class.isInstance(obj)) {
        C o = (C) obj;
        return method(o, highRes);
    } else {
        throw new FacesException("Unsupported Conversion: " + obj);
    }
    
    0 讨论(0)
提交回复
热议问题