gpt4 book ai didi

java - serverError : class java. lang.ClassCastException java.lang.Integer 无法转换为 java.lang.String

转载 作者:行者123 更新时间:2023-11-29 03:08:03 24 4
gpt4 key购买 nike

我想为输入字段创建 validator ,以便检查值并在插入的值不是 int 时发送错误消息。

bean 类:

public class PricingCalculatorValidator implements Validator
{
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException
{
// Cast the value of the entered input to String.
String input = (String) value;

// Check if they both are filled in.
if (input == null || input.isEmpty())
{
return; // Let required="true" do its job.
}

// Compare the input with the confirm input.
if (containsDigit(input))
{
throw new ValidatorException(new FacesMessage("Value is not number."));
}
}

public final boolean containsDigit(String s)
{
boolean containsDigit = false;

if (s != null && !s.isEmpty())
{
for (char c : s.toCharArray())
{
if (containsDigit = Character.isDigit(c))
{
break;
}
}
}

return containsDigit;
}

}

转换插入值的正确方法是什么?现在我得到异常

serverError: class java.lang.ClassCastException java.lang.Integer cannot be cast to java.lang.String

最佳答案

根据异常,JSF 实际上将 Integer 实例作为 value 传递给 validate() 方法。从技术上讲,您应该如下所示将其转换为 Integer 以保持 Java 运行时的正常运行。

// Cast the value of the entered input to Integer.
Integer input = (Integer) value;

显然,您已经将输入字段绑定(bind)到模型中的 Integer 属性,如下所示:

<h:inputText value="#{bean.pricing}" />
private Integer pricing;

换句话说,整个自定义 validator 是不必要的。如果值首先已经是 Integer,则没有必要验证该值是否为整数。它不可能包含非数字作为值。

完全摆脱那个自定义 validator 。

JSF 有几个 builtin converters对于像 Integer 这样的标准类型,它会根据模型值类型自动运行。而且,转换器在 validator 之前运行。这就是为什么在您的自定义 validator 中该值已经作为 Integer 到达。唯一与您的自定义 validator 相关的是错误消息,它与标准转换错误消息不同。如果你merely想自定义特定输入字段的转换错误消息,只需将其设置为输入字段的 converterMessage 属性即可。

<h:inputText value="#{bean.pricing}" converterMessage="Value is not numeric." />

与具体问题无关,“验证”该值是否表示有效的 Integer(此过程在 JSF 中实际上称为转换,应该发生在 custom converter 中)可以以更简单的方式执行:

String string = getItSomehowWithoutClassCastException();

try {
Integer integer = Integer.valueOf(string);
} catch (NumberFormatException e) {
throw new ConverterException(new FacesMessage("Value is not an integer."));
}

如果您最终想要得到一个 Integer,则无需检查每个数字。如前所述,JSF builtin converter已经解决了这个问题。

关于java - serverError : class java. lang.ClassCastException java.lang.Integer 无法转换为 java.lang.String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31036495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com