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中的第一个“渲染”属性限制,即使渲染为false,组件仍然处理。这会导致ui:repeat中的每个attr类型尝试评估每个输出组件的值。即selectBooleanCheckbox的值将尝试评估日期类型。如果render为false,则最终不会呈现该组件。如果没有selectBooleanCheckbox(第二期),即使出现此问题,一切都很好。 第二个问题,selectBooleanCheckbox将始终假设输入值是布尔类型。因此,对于日期类型,评估值(由于第1期)将失败。
这个代码狙击手是否通常用于在JSF中动态显示不同的数据类型?我尝试为selectBooleanCheckbox配置自定义渲染器,转换器。但它仍然失败,数据类型转换异常。任何的想法?如何将selectBooleanCheckBox的默认“expectedType”从“Boolean”更改为“Object”,就像其他JSF输入组件一样。
- 更新:问题仅适用于mojarra而非myfaces。