Я пытаюсь динамически отображать richfaces и элементы пользовательского интерфейса jsf на основе значения dataType.
Пример: у меня есть перечисление как показано ниже
public enum DataType {
DT_LONGLONG(1), DT_STRING(2), DT_LONG(3), DT_DATE(4), DS_EXTERNALREFERENCE(5),
DT_BOOLEAN(6), DT_FLOAT(7), DT_SHORT(8);
}
Затем на странице xhtml, просматривая список своих пользовательских объектов, я проверяю dataType и отображаю элементы пользовательского интерфейса соответственно, как показано ниже:
<c:if test="#{meaCompPartAttr.dataType.dataType == 2}">
<h:inputText />
</c:if>
<c:if test="#{(meaCompPartAttr.dataType.dataType == 1) or
(meaCompPartAttr.dataType.dataType == 3) or
(meaCompPartAttr.dataType.dataType == 8)}">
<h:inputText onkeyup="javascript:validateField(this, '#{tpMsgs.longRegularExpression}');">
<f:validateLongRange/>
</h:inputText>
</c:if>
<c:if test="#{meaCompPartAttr.dataType.dataType == 7}">
<h:inputText onkeyup="javascript:validateField(this, '#{tpMsgs.doubleRegularExpression}');">
<f:validateDoubleRange/>
</h:inputText>
</c:if>
<c:if test="#{meaCompPartAttr.dataType.dataType == 6}">
<h:selectBooleanCheckbox />
</c:if>
<c:if test="#{meaCompPartAttr.dataType.dataType == 4}">
<rich:calendar />
</c:if>
Из-за этого я обычно получаю исключения приведения классов, такие как String к Boolean или Long к String и т. Д. Я предполагаю, что это происходит, потому что код jstl и jsf не работают синхронно.
Существует ли какой-либо другой подход для динамического рендеринга элементов пользовательского интерфейса, как предложено в приведенном выше примере?