JSF 2 convertNumber permille

Posted

技术标签:

【中文标题】JSF 2 convertNumber permille【英文标题】: 【发布时间】:2018-01-04 09:11:04 【问题描述】:

我们有一个等于 0.003 的 #object.amount,我们希望将其显示为 3‰(使用 permille 运算符)

我们还想将 inputText 的值转换为 permille。 (例如:用户输入 3 将存储 0.003)

f:convertNumber 允许我们转换为 % 类型而不是 ‰ :

<h:outputText value="#object.amount" >
    <f:convertNumber type="percent" />
</h:outputText>

我们如何在 outputText 中显示 permille 值,并在 inputText 中将值转换为 permille ?

【问题讨论】:

通过创建自定义转换器 【参考方案1】:

像 Kukeltje 建议的那样,您可以实现自定义转换器,例如:

@FacesConverter("permilleConverter")
public class PermilleConverter implements Converter 

  private static final String PERMILLE_SYMBOL = "‰";
  private static final int PERMILLE_FACTOR = 1000;

  @Override
  public Object getAsObject(FacesContext context, UIComponent component, String value) 
    if (value == null) 
      return null;
    
    return getDoubleValue(value) / PERMILLE_FACTOR;
  

  private Double getDoubleValue(String value) 
    NumberFormat nf = new DecimalFormat();
    Double doubleValue;
    try 
      Number number = nf.parse(value);
      doubleValue = number.doubleValue();
     catch (ParseException e) 
      throw new ConverterException("no valid format");
    
    return doubleValue;
  

  @Override
  public String getAsString(FacesContext context, UIComponent component, Object value) 
    if (value == null) 
      return null;
    
    double amount = (double) value;
    NumberFormat nf = new DecimalFormat();
    nf.setMaximumFractionDigits(0);
    return nf.format(amount * PERMILLE_FACTOR) + PERMILLE_SYMBOL;
  


并像这样使用它:

<h:form>
    <h:outputText value="#userBean.amount">
        <f:converter converterId="permilleConverter" />
    </h:outputText>

    <h:inputText value="#userBean.amount">
        <f:converter converterId="permilleConverter" />
    </h:inputText>

    <h:commandButton value="test">
        <f:ajax execute="@form" render="@form" />
    </h:commandButton>
</h:form>

【讨论】:

我在 Kukeltje 发表评论后做了类似的事情,但这个详细的回复对于未来的类似查询将非常有用。谢谢!

以上是关于JSF 2 convertNumber permille的主要内容,如果未能解决你的问题,请参考以下文章

f:convertNumber 带输入 jsf

带有空格的 JSF convertNumber 模式

jsf 1.2和jsf 2.0之间的区别

从 JSF 1.2 迁移到 JSF 2.0 后,每次导航都出现 ViewExpiredException

将带有 Ajax4jsf 1.x 的 JSF 1.1 迁移到 JSF 2

当 JSF 2 的视图中存在元数据转换器时,为啥 JSTL-JSF2 不能正常工作