我有一个非常简单的源代码:
<xp:inputText id="inputText3"
value="#{document1.A}"
defaultValue="5.5" type="number">
<xp:this.converter>
<xp:convertNumber type="number">
</xp:convertNumber>
</xp:this.converter>
</xp:inputText>
如果我第一次使用欧洲浏览器(使用逗号分隔符表示十进制数)(加载页面时),我会在该字段中看到正确的信息。 如果我刷新(例如,部分刷新)InputBox ......我看到 55
使用USA浏览器可以正常工作(磅是小数点分隔符)
我尝试使用转换器但没有成功...
你有建议解决这个问题吗?
Tnx很多
答案 0 :(得分:1)
我已经解决了我的问题。真正的问题是HTML5属性类型=使用点我的数字强制的数字...
所以我创建了一个自定义转换器,现在可以正常工作:
<xp:inputText value="#{document1.valore}" id="valore1"
type="number" immediate="false" defaultValue="5.5">
<xp:this.converter>
<xp:customConverter
getAsString="#{javascript:value.toString()}">
<xp:this.getAsObject><![CDATA[#{javascript:parseFloat(value.replace(/,/g,"\."))}]]></xp:this.getAsObject>
</xp:customConverter>
</xp:this.converter>
</xp:inputText>
如果你插入,那么工作,或。在inputtext
中P.S。 Chrome存在十进制值问题,无法将值呈现到输入框
答案 1 :(得分:0)
我不确定这是否正确,但听起来服务器正在向浏览器发送5.5。但是,在部分刷新期间,欧洲浏览器会识别&#34;。&#34;作为千位分隔符,因此将值作为55发送回服务器,然后将其作为55写回基础数据源,并以55的形式传回浏览器。
您可以通过检查浏览器中的帖子数据或添加仅打印组件的submittedValue的自定义验证器来确认。它需要是验证器或转换器,才能在Process Validations阶段运行,因此在转换值并将其写回字段之前。无论浏览器如何,服务器端5.5都应以相同的方式处理。