我正在开发一个 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 属性专门接受一个列表,而不仅仅是任何列表。如何在避免解析错误的同时实现这一目标?
你不能。仅以下内容有效:
<cc:attribute name="rooms" type="java.util.List" />
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" />