gpt4 book ai didi

java - JSF 中的 boolean 值到自定义字符串转换器

转载 作者:行者123 更新时间:2023-12-01 13:16:32 26 4
gpt4 key购买 nike

我要求所有 boolean 字段都应作为“Y”和“F”值保存在数据库中。在我的表单中,我使用 primefaces <p:selectBooleanCheckbox>用于检索 boolean 输入:

<h:outputLabel for="termsOfUseAck" value="#{msg['user_sign_up.terms_of_use_ack']}" />
<p:selectBooleanCheckbox id="termsOfUseAck" value="#{accountRegistrationController.account.termsOfUseAck}" converter="booleanToYNConverter" />

我的转换器定义如下:

@FacesConverter(value="booleanToYNConverter")
public class BooleanToYNConverter implements Converter {
public BooleanToYNConverter() {
}

public Object getAsObject(FacesContext facesContext,
UIComponent uiComponent,
String param) {
try {
Boolean result = Boolean.parseBoolean(param);
System.out.println("#BooleanToYNConverter.getAsObject param is: " + param);
return result;
} catch (Exception exception) {
throw new ConverterException(exception);
}
}

public String getAsString(FacesContext facesContext,
UIComponent uiComponent,
Object obj) {
try {
if ((obj != null) && ((Boolean) obj)) {
System.out.println("#BooleanToYNConverter.getAsString returns Y");
return "Y";
} else {
System.out.println("#BooleanToYNConverter.getAsString returns N");
return "N";
}
} catch (Exception exception) {
throw new ConverterException(exception);
}
}
}

在控制台中我可以看到转换器被调用并且它返回单个字符:

#BooleanToYNConverter.getAsString returns Y

但不幸的是最后accountRegistrationController.account.termsOfUseAck设置为truefalse值而不是所需的 YN 。我在干啥呢?

最佳答案

我开始写评论,但意识到我的观点可以写成一个完整的答案。首先,像您所做的那样使用 String 值作为纯值集是没有意义的。这就是enum types是给。 JSF 2 和最流行的 ORM(如 Hibernate)都支持它们,因此对于您的情况,理想的情况是这样的:

public enum Option {
Y, N;
}

嗯,话虽如此,在集合中存储 boolean 值没有任何意义,因此您需要更深入地分析您的模型。

如果某个属性只有两种可能性,请使用 boolean 值,因为它通常在数据库层中占用一个位。相反,如果它是一整套可能性(将来也可能会增加),那么在您的控制代码以及数据库或您用于持久性的任何内容中使用枚举。

关于java - JSF 中的 boolean 值到自定义字符串转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22423520/

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