Лучший подход для визуализации элементов пользовательского интерфейса на основе dataType - PullRequest
1 голос
/ 09 декабря 2011

Я пытаюсь динамически отображать 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 не работают синхронно.

Существует ли какой-либо другой подход для динамического рендеринга элементов пользовательского интерфейса, как предложено в приведенном выше примере?

1 Ответ

2 голосов
/ 09 декабря 2011

То есть вы используете итерацию, используя <ui:repeat> или <h:dataTable>, или любой другой итеративный компонент JSF вместо JSTL <c:forEach>? Либо используйте <c:forEach> вместо, либо используйте атрибут rendered вместо <c:if>.

Смотри также:

...