如何在 JSF 复合组件属性中指定通用类型?

问题描述 投票:0回答:1

我正在开发一个 JSF 项目,我需要将 List 传递给复合组件。但是,当我尝试在 cc:attribute 的 type 属性中指定此泛型类型时遇到问题。这是我尝试过的:

<cc:interface>
    <cc:attribute name="patient" type="com.divudi.entity.Patient" />
    <cc:attribute name="rooms" type="java.util.List<com.divudi.entity.inward.PatientRoom>" />
</cc:interface>

这会导致以下错误:

javax.servlet.ServletException: Error Parsing /resources/ezcomp/common/admission_details.xhtml: Error Traced[line: 13] The value of attribute "type" associated with an element type "cc:attribute" must not contain the '<' character.

我了解 JSF 复合组件属性不直接支持泛型类型。

有处理这种情况的解决方法或最佳实践吗?

我需要确保 rooms 属性专门接受一个列表,而不仅仅是任何列表。如何在避免解析错误的同时实现这一目标?

generics jsf composite-component
1个回答
0
投票

你不能。仅以下内容有效:

<cc:attribute name="rooms" type="java.util.List" />

请注意,限制是在 EL API(

ValueExpression#getType()
)中,而不是在 JSF API 中。

强制执行类型的最佳选择是将其包装在扩展的自定义模型中

ArrayList

public class PatientRooms extends ArrayList<PatientRoom> {
    public PatientRooms(List<PatientRoom> rooms) {
        super(rooms);
    }
}
<cc:attribute name="rooms" type="com.divudi.entity.inward.PatientRooms" />
© www.soinside.com 2019 - 2024. All rights reserved.