JSF 2 convertNumber permille
JSF 2 convertNumber permille
我们有一个等于 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?
如 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>
我们有一个等于 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?
如 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>