在 JSF f:convertNumber 中显示原始值(小数位数不受限制)

问题描述 投票:0回答:3

我在

<f:convertNumber groupingUsed="false" />
中使用
<h:inputText
将用户输入转换为数字。再次打开输入对话框时,输入格式将仅显示 3 个小数位。我如何更改它以“按原样”显示输入。

为了格式化输出中的值,我使用

#{of:formatNumber(specification.pricePerUnit, '#0.000')}
显示 3 个小数位(至少)。不幸的是,我们有客户想要输入更多小数位(上面的问题)。那么,如何显示至少有 3 位小数位的数字,但如果有更多小数位,则全部显示出来?

提前致谢:)

jsf-2.2 omnifaces jsf-2.3
3个回答
1
投票

好吧,让我们假设以下情况:我有一个带有以下内容的表单: 。我输入值 123,123456789 并保存。和 您上面的代码在另一个页面上的值显示为 123,123456789。但是当我再次打开表单编辑值时, 输入字段将其显示为 123,123,但不是 123,123456789。所以,我假设 maxFractionDigits 的默认值为 3?

一个非常基本的例子:

<h:form>
    <div>
    <h:outputText value="#{of:formatNumber( testBean.myNumber, '0.000#######')}" />
    </div>
    <div>
    <h:inputText value="#{testBean.myNumber}" >
        <f:convertNumber groupingUsed="false" pattern='0.000#######' />
    </h:inputText>
    </div>
    <h:commandButton type="submit" value="Submit" />
</h:form>

还有一个bean代码:

private BigDecimal myNumber = new  BigDecimal("355.3456");

public BigDecimal getMyNumber() {
    return myNumber;
}

public void setMyNumber(BigDecimal myNumber) {
    this.myNumber = myNumber;
}

一些测试:

第一个 GET 请求后的页面如下所示:


现在我输入12345.6789099


单击

Submit
按钮后:


另外一些例子:





0
投票

很难找到任何文档,但在 org.glassfish/javax.faces 2.3.9 中,我也发现 maxFractionDigits 有一个默认值 3

<f:convertNumber groupingUsed="false" />

等于

<f:convertNumber groupingUsed="false" maxFractionDigits="3" />

根据您的需要更改它:

<f:convertNumber groupingUsed="false" maxFractionDigits="10" />

0
投票

要让用户输入多位数的双精度数,您必须使用不带转换器的

h:inputText

如果你想很好地显示它(只读),你可以使用

f:convertNumber
但你需要比例来找到位数(例如将 Double 转换为 BigDecimal)。

要将其显示在数据表中,您可以使用 Omnifaces 转换器 https://showcase.omnifaces.org/taghandlers/converter

© www.soinside.com 2019 - 2024. All rights reserved.