Jsf 无法将带有f:convertNumber的数字存储到地图中
我有一个奇怪的情况,当我试图将f:convertNumber存储到非类型映射时,它不起作用 我希望该数字在映射中存储为java.lang.Double对象Jsf 无法将带有f:convertNumber的数字存储到地图中,jsf,jsf-2,Jsf,Jsf 2,我有一个奇怪的情况,当我试图将f:convertNumber存储到非类型映射时,它不起作用 我希望该数字在映射中存储为java.lang.Double对象 以下是xhtml摘录: <h:inputText value="#{tInputBean.generalMap['myNumber']}" id="testNumber"> <f:convertNumber /> </h:inputText> <p:message for="testNumb
以下是xhtml摘录:
<h:inputText value="#{tInputBean.generalMap['myNumber']}" id="testNumber">
<f:convertNumber />
</h:inputText>
<p:message for="testNumber" />
这是我的日志:
DEBUG PhaseTracker - BEFORE PHASE RESTORE_VIEW 1
DEBUG PhaseTracker - AFTER PHASE RESTORE_VIEW 1
DEBUG PhaseTracker - BEFORE PHASE APPLY_REQUEST_VALUES 2
DEBUG DebugUtil - ============== start debugMap parameter map : ==============
DEBUG DebugUtil - testNumber='123123123'
DEBUG DebugUtil - javax.faces.partial.execute='SaveHeader testNumberPanel RPBPanel'
DEBUG DebugUtil - SaveHeader='SaveHeader'
DEBUG DebugUtil - javax.faces.partial.render='messages RPBPanel DebugVersionHeader testNumberPanel'
DEBUG DebugUtil - javax.faces.source='SaveHeader'
DEBUG DebugUtil - j_idt42='j_idt42'
DEBUG DebugUtil - javax.faces.ViewState='7088371747667351331:-3641627426454744246'
DEBUG DebugUtil - transNum='TRX003'
DEBUG DebugUtil - javax.faces.partial.ajax='true'
DEBUG DebugUtil - ============== end debugMap parameter map : ==============
DEBUG PhaseTracker - AFTER PHASE APPLY_REQUEST_VALUES 2
DEBUG PhaseTracker - BEFORE PHASE PROCESS_VALIDATIONS 3
DEBUG PhaseTracker - AFTER PHASE PROCESS_VALIDATIONS 3
DEBUG PhaseTracker - BEFORE PHASE RENDER_RESPONSE 6
DEBUG PhaseTracker - AFTER PHASE RENDER_RESPONSE 6
渲染后,
替换为:{0}:发生转换错误。
我注意到的是:
标记中指定类似java.lang.Double的类型我应该自己制作转换器让它工作吗?我已经在想象这样的事情:
<h:inputText value="#{tInputBean.generalMap['myNumber']}" id="testNumber">
<f:converter type="MyDoubleConverter" />
</h:inputText>
<p:message for="testNumber" />
下面是我的jsf如何利用它:
<h:inputText value="#{tInputBean.generalMap['myNumber']}"
id="testNumber" converter="Double"/>
<p:message for="testNumber" />
您应该尝试以下方法:
<f:converter converterId="javax.faces.Double"/>
如果要格式化,可以使用数字转换器:
<f:convertNumber type="number" maxIntegerDigits="3"/>
有关数字格式的详细信息,您可以找到和。最后,我为此制作了自己的简单转换器,代码已发布在原始文章的底部
谢谢大家! @Cristian Boariu:哇!那很有效,谢谢你!但我现在有另一个问题:当在inputText中呈现时,它会有1.23123E8。f:convertNumber不会发生这种情况,因为它将根据区域设置进行格式化(如果我没有弄错的话)。对这件事有什么建议吗?你好,谢谢你的建议。但是我注意到f:converter标记不支持pattern属性。我试过你的想法,但它仍然显示12.23123E8。在此之前,我尝试在f:converter标记中嵌套f:attribute name=“pattern”value=“…”,希望它能工作,但也失败了。@Albert Kam-你说得对,pattern属性只存在于
f:convertNumber
中。你能试一下我更新的答案吗?您好,我也更新了我的测试,只使用了f:convert,或者只使用了f:convertNumber,甚至是嵌套在输入文本中的两个组合。只有f:convert工作,但没有格式。其余部分由于转换错误而失败。我目前正在尝试自己的转换器以及在同一时间。
<f:converter converterId="javax.faces.Double"/>
<f:convertNumber type="number" maxIntegerDigits="3"/>