koe.
1º. não é necessário declarar o atributo type pois seu default já é "number". ou para o seu caso, declare "currency"
uma forma bem simples é fazer uma classe converter e chamá-la dentro da própria tag.
tive o mesmo problema que vc e achei uma solução.
Crie a classe (Ex: DoubleConvert).
package br.com.tenax.conversor;
import java.text.NumberFormat;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
public class DoubleConvert implements Converter {
public DoubleConvert() {
}
public Object getAsObject(final FacesContext context,
final UIComponent component, final String value) {
try {
final NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
return nf.parse(value).doubleValue();
} catch (final Exception e) {
return 0.0D;
}
}
public String getAsString(final FacesContext context,
final UIComponent component, Object value) {
if ((value == null) || (value.toString().trim().equals(""))) {
value = 0.0D;
}
final NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
return nf.format(Double.valueOf(value.toString()));
}
}
e adicione o conversor no faces-config.
<converter>
<converter-id>DoubleConverter</converter-id>
<converter-class>br.com.projeto.conversores.DoubleConvert</converter-class>
</converter>
última coisa. para evitar problemas de localidade como troca de . por , nas casas decimais e de milhares defina seu locale no faces-config.
<application>
<locale-config>
<default-locale>pt_BR</default-locale>
</locale-config>
</application>
deverá ficar + ou - assim:
<h:outputText value="Valor do prêmio R$:" />
<h:inputText id="valorPremio"
size="10"
styleClass="especialTextAlignRight"
value="#{MetaVigenciaMB.valorPremio}" >
<f:converter converterId="DoubleConverter" /> // use aqui o mesmo id declarado no faces-config
</h:inputText>
Outro modo de se fazer.
no faces-config, defina um conversor para tudo o que for do tipo Double.
então, todos os campos, inputs etc serão convertidos automaticamente sem necessidade de se declarar conversores nas tags.
<converter>
<converter-for-class>java.lang.Double</converter-for-class>
<converter-class>br.com.tenax.conversor.DoubleConvert</converter-class>
</converter>
espero ter ajudado. qualquer dúvida poste aqui.
abraço;