Jsf 无法将带有f:convertNumber的数字存储到地图中

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

我有一个奇怪的情况,当我试图将f:convertNumber存储到非类型映射时,它不起作用

我希望该数字在映射中存储为java.lang.Double对象


以下是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}:发生转换错误。


我注意到的是:

  • 发生转换错误时,没有发生异常。我的exceptionhandler捕获并记录所有异常,不处理任何内容。没有异常跟踪
  • 我无法在
    标记中指定类似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"/>