1

jsf 有几个限制(缺陷?)导致这个问题。

    <ui:repeat value="#{myBean.myAttrs}" var="attr">
          <h:outputText value="#{myBean.selectedObj.values[attr.name]}" 
            rendered="#{attr.dataType=='Text'}"/>
          <h:selectBooleanCheckbox value="#{myBean.selectedObj.values[attr.name]}"
            rendered="#{attr.dataType=='Boolean'}"/>
           .... render other data type like list, date etc.
    </ui:repeat>

jsf中的第一个“render”属性限制,即使render为false,组件仍然被处理。这会导致 ui:repeat 中的每个 attr 类型都会尝试评估每个输出组件的值。即 selectBooleanCheckbox 的值将尝试评估日期类型。如果 render 为 false,则组件最终不会被渲染。如果没有 selectBooleanCheckbox(第二期),即使有这个问题,一切都很好。第二个问题,selectBooleanCheckbox 将始终假定输入值是布尔类型。因此,对于日期类型,评估值(由于第一个问题)将失败。

这个代码狙击手是否常见于在 JSF 中动态显示不同的数据类型?我尝试为 selectBooleanCheckbox 配置自定义渲染器、转换器。但它仍然因数据类型转换异常而失败。任何想法?如何将 selectBooleanCheckBox 的默认“expectedType”从“Boolean”更改为“Object”,就像其他 JSF 输入组件一样。

--更新:这个问题只针对 mojarra 而不是 myfaces。

4

0 回答 0