我被困住了,需要 JSF 专家的外部帮助来解决以下问题:我在 faces-config.xml 中为特定类定义了一些转换器,因此我不必一直使用转换器属性或标记。例如:
<converter>
<converter-for-class>org.joda.time.DateTime</converter-for-class>
<converter-class>com.example.converter.JodaDateTimeConverter</converter-class>
</converter>
现在需要一个 JSF 组件(主要是 rich:extendedDataTable)的爬虫,它构建整个组件树并将一层一层地转换为 CSV、HTML 或以后可能需要的任何东西。即导出为 CSV、HTML 等的通用方式,无需每次都重新实现。它几乎完成了(感谢我的一位老同事的好主意),它确实工作得很好,除了一个部分:
Object expressionResult = expression.getValue(FacesContext.getCurrentInstance().getELContext());
expressionResultString = expressionResult.toString();
该命令检索 h:outputText 的值并将其转换为字符串。如果有针对特定表达式结果的自定义转换器,那么最后一行是我想用转换器类替换的内容。我不知道如何为我的课程找到确切的转换器(由 faces-config 指定)。对于我的用例,FacesContext 似乎没有任何有用的方法/对象。直接访问 faces-config.xml 似乎有点错误。正确的方法可能类似于:
Converter converter = magically_fetch_the_correct_converter_for_expressionResult_type;
converter.getAsString(FacesContext.getCurrentInstance(), component,
expressionResult);
如果我为组件本身使用转换器 ID 和适当的属性/标签,那将相当容易,但我真的想避免那种无用的附加代码。
有人可以帮我吗?