2012-01-04 59 views
2

我有一个关于JSF转换的问题。我有一个输入文本定义是这样的:JSF标准转换器

<p:inputText size="15" maxlength="11" value="#{user.SSN}"/> 

支持bean:

private Integer SSN; 

从这个网站: http://laliluna.com/articles/posts/javaserver-faces-converter-tutorial.html

据我所知,JSF还内置转换器整数。

“如果您没有指定转换器,JSF会为您选择一个。该框架具有所有基本类型的标准转换器:Long,Byte,Integer,Short,Character,Double, Float,BigDecimal, BigInteger和Boolean ..例如,如果您的组件与布尔类型的属性相关联,那么JSF将选择布尔转换器。原始类型会自动转换为它们的对象。

但是当我执行上面的代码,我得到这个错误:

j_idt78: '99999999999' must be a number consisting of one or more digits. 

有什么问题我的理解这个概念?为什么JSF在这种情况下不使用它的标准转换器?

回答

4

不完全确定,但我肯定数字99999999999太大而无法存储为整数,所以相反它默认将它视为String。

如果您将字段SSN更改为LongBigInteger,那么它可能会正常工作。您也可以选择明确添加以下Facelets标记的Primefaces标签内<f:convertNumber>

http://docs.oracle.com/javaee/5/javaserverfaces/1.2/docs/tlddocs/f/convertNumber.html

+1

事实上直接指定该字段中的转换器,'Integer'的最大值可以通过方式被确定' Integer.MAX_VALUE',它是'2147483647'。 – BalusC 2012-01-04 13:30:44

+0

感谢您的答案。我通过将SSN设置为String来解决我的问题,但我仍然对这种情况感到好奇。您认为问题是由于输入值的大小而发生的吗?我听说convertNumber有点问题。如果我选择convertNumber,我也应该将我的SSN定义为Number,对吧? – lamostreta 2012-01-04 13:41:43

+0

@lamostreta我实际上不确定它是否能够将其转换为超类型Number,但试试看它是否有效。你如何决定这么做是你的设计选择。就我个人而言,我选择将所有ManagedBean状态数据存储为字符串或我编写自定义转换器的数据对象。在调用我的业务逻辑层之前,我通常会在ManagedBean中进行所有String到Primitive数据类型的转换。 – 2012-01-04 13:50:54