【问题标题】:custom boolean converter to set style class自定义布尔转换器以设置样式类
【发布时间】:2015-06-13 19:37:43
【问题描述】:

在 faces-config.xml 中定义了一个转换器,它将布尔值更改为字符串“是”或“否”

<converter>
    <converter-id>booleanConverter</converter-id>
    <converter-class>com.example.BooleanConverter</converter-class>
</converter>

使用

效果很好
<h:outputText value="#{bean.booleanValue}" converter="booleanConverter" />

但是,如果打算为周围的div 元素设置样式,这可以使用转换器吗?例如,如果定义了一个转换器,它返回字符串“booleanTrue”和“booleanFalse”(在 CSS 中定义)

<converter>
    <converter-id>booleanStyleConverter</converter-id>
    <converter-class>com.example.BooleanStyleConverter</converter-class>
</converter>

我可以这样做吗:

<div class="#{booleanStyleConverter.getAsString(null,null,bean.booleanValue)}">
    <h:outputText value="#{bean.booleanValue}" converter="booleanConverter" />
</div>

在 backing bean 中定义有效,但似乎并不令人满意

public String booleanStyle(boolean value) {
    BooleanStyleConverter bsc = new BooleanStyleConverter();
    return bsc.getAsString(null, null, value);
}

【问题讨论】:

    标签: jsf converter


    【解决方案1】:

    转换器的全部意义在于将保存到支持 bean 的值更改为所需的值。你为什么不只使用class="#{bean.booleanValue}"

    或者更简单:class="textBox.value eq 'true'? 'booleanTrue': 'booleanFalse'",其中textBox 是文本框的绑定:

    <div class="#{textBox.value eq 'true'? 'booleanTrue': 'booleanFalse'}">
        <h:outputText binding="#{textBox}" id="textBox" value="#{bean.booleanValue}"/> 
    </div>
    

    【讨论】:

    • 1) 在布尔表达式中将布尔值与字符串格式的布尔值进行比较没有什么意义。只需直接检查布尔值本身。换句话说,摆脱eq 'true'。 2) 你把idbinding 混淆了。
    • 真相@BalusC。对于#1,如果正在输入,文本框不会将其识别为布尔值。您是说字符串将自动转换为布尔值?
    • 它绑定到 boolean 属性。所以它已经是布尔值了。即便如此,如果它是 String 的值 true,EL 将执行强制魔法。
    • 没有看到来自支持 bean 的值绑定来确认类型,但很高兴了解 EL @BalusC
    猜你喜欢
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 2014-01-20
    • 2020-02-01
    • 1970-01-01
    相关资源
    最近更新 更多