creditCard
2 つの文字列値を持つy
かn
、DB から入力できるフィールドを含むバッキング Bean があります。に変換されるようにy
、これをチェックボックスに表示したいと思います。n
boolean
どうすれば実装できますか?.が必要なのに対し、応答のレンダリング中にカスタム コンバーターをgetAsString()
リターンとして使用することはできません。String
boolean
creditCard
2 つの文字列値を持つy
かn
、DB から入力できるフィールドを含むバッキング Bean があります。に変換されるようにy
、これをチェックボックスに表示したいと思います。n
boolean
どうすれば実装できますか?.が必要なのに対し、応答のレンダリング中にカスタム コンバーターをgetAsString()
リターンとして使用することはできません。String
boolean
コンポーネントは<h:selectBooleanCheckbox>
カスタム コンバーターをサポートしていません。プロパティは である必要がありboolean
ます。限目。
y
最善の方法は、永続化レイヤーで変換を行うか、元のゲッター/セッターを装飾するブール値のゲッター/セッターを追加するn
か、古いゲッター/セッターを完全に置き換えることです。例えば
private String useCreditcard; // I'd rather use a char, but ala.
public boolean isUseCreditcard() {
return "y".equals(useCreditcard);
}
public void setUseCreditcard(boolean useCreditcard) {
this.useCreditcard = useCreditcard ? "y" : "n";
}
代わりに使用し<h:selectBooleanCheckbox>
ます。
<h:selectBooleanCheckbox value="#{bean.useCreditcard}" />
私は同様の問題を抱えていました。以前の投稿に同意します。この問題は永続レイヤーで処理する必要があります。ただし、他の解決策があります。私の問題は次のとおりです。データベースに、ブール値の true または false (0=false、1=true) を表す TINYINT 列があります。そのため、JSF アプリケーションでそれらを表示し、ブール値として処理したいと考えました。残念ながら、それはまったく不可能だったか、適切な方法が見つからなかっただけです。しかし、チェックボックスを使用する代わりに、私の解決策は selectOneMeny を使用し、それらの値を「はい」または「いいえ」に変換することでした。ここにコードがあるので、同様の問題を抱えている人はそれを使用できます。
コンバータ:
@FacesConverter("booleanConverter")
public class BooleanConverter implements Converter{
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
short number= 0;
try {
if (value.equals("Yes")) {
number= 1;
}
} catch (Exception ex) {
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_FATAL);
message.setSummary(MessageSelector.getMessage("error"));
message.setDetail(MessageSelector.getMessage("conversion_failed") + ex.getMessage());
throw new ConverterException(message);
}
return number;
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
return value.toString();
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
JSF ページ:
<h:selectOneMenu id="selectOnePlayerSucc" value="#{vezbaTrening.izvedenaUspesno}" converter="booleanConverter">
<f:selectItems id="itemsPlayerSucc" value="#{trainingOverview.bool}" var="opt" itemValue="#{opt}" itemLabel="#{opt}"></f:selectItems>
そして、ManagedBean で、可能な値 (「はい」と「いいえ」) のリストを作成しました。
private List<String> bool;
public List<String> getBool() {
return bool;
}
public void setBool(List<String> bool) {
this.bool = bool;
@PostConstruct
public void init () {
...
bool = new LinkedList<>();
bool.add("Yes");
bool.add("No");
}