【问题标题】:How to pass class as method parameter with EL如何使用 EL 将类作为方法参数传递
【发布时间】:2021-03-18 20:11:40
【问题描述】:

您好,我是 jsf/el 的新手,我正在寻找一种解决方案来传递一个类 ex:“Student.class”作为方法参数传递给我在我的支持 bean 中定义的方法。顺便说一句,我使用字符串参数测试了相同的重载方法,没有任何问题,但对于我的用例,我更喜欢 Class 参数而不是 String 参数。

MyBean.java:

public void createPersonType(Class className) {
    // Person factory code goes here
}

person.xhtml:

<... actionListener="#{myBean.createPersonType(Student.class)}" />

欢迎提出任何建议。谢谢。

【问题讨论】:

  • 我认为 EL 不允许这样做。为什么不创建像createStudent() 这样的重载方法。您的 MenuItem 已经是特定的,为什么不让它调用特定的方法。

标签: jsf el


【解决方案1】:

EL 不支持此功能。

如果您想强制执行类型安全,只需使用 enum

public interface Person {

    public enum Type {
        STUDENT, TEACHER, ETC;
    }

    public Type getType();
}
public void createPersonType(Person.Type personType) {
    // Person factory code goes here
}
<... actionListener="#{myBean.createPersonType('STUDENT')}" />

JSF 会自动将字符串转换为实际的枚举。

您也可以使用&lt;f:importConstants&gt;(或&lt;o:importConstants&gt;)代替字符串。

<f:metadata>
    <f:importConstants type="com.example.Person.Type" var="PersonType" />
</f:metadata>
...
<... actionListener="#{myBean.createPersonType(PersonType.STUDENT)}" />

另见:

【讨论】:

    【解决方案2】:

    您可以将整个类引用 your.package.Student 作为 String 传递。您的方法如下所示:

    public void createPersonType(String className) {
        Class<?> class = Class.forName(className);
    }
    

    【讨论】:

    • 来自问题:“顺便说一句,我使用字符串参数测试了相同的重载方法,没有任何问题,但对于我的用例,我更喜欢 Class 参数而不是 String 参数。” i>.
    • 哦,我的错,我不知何故错过了那部分。
    猜你喜欢
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多