如何将p:selectBooleanCheckbox绑定到控制器方法

3
我希望将<p:selectBooleanCheckbox>绑定到我的控制器方法。当我尝试绑定时,出现以下错误。是否有其他方法?
Property 'calculateBooleanValue' not found on type tr.controller.MyController

这是我的观点。
<p:datatable var="dataRow" ....>
    <p:selectBooleanCheckbox value="#{myController.calculateBooleanValue(dataRow)}" />

我的控制器

public boolean calculateBooleanValue(Data data) {

 //There are some calculations with data and returns some boolean value acc. to this data


 }
2个回答

8

value属性必须代表一个值表达式,也就是说,它必须绑定到由真正的JavaBean getter和setter表示的属性。您不应该使用带有括号的方法表达式语法,这不是有效的值表达式语法。

因此,如下:

<p:selectBooleanCheckbox value="#{myController.booleanValue}" />

使用

private boolean booleanValue;

@PostConstruct
public void init() {
    booleanValue = true;
}

public boolean isBooleanValue() {
    return booleanValue;
}

public void setBooleanValue(boolean booleanValue) {
    this.booleanValue = booleanValue;
}

如果您打算在每次单击复选框时执行某个“控制器方法”(正如您自己所说),则请添加一个带有监听器的<p:ajax>
<p:selectBooleanCheckbox value="#{myController.booleanValue}">
    <p:ajax listener="#{myController.changeBooleanValue}" />
</p:selectBooleanCheckbox>

使用

public void changeBooleanValue() {
    System.out.println("Current boolean value is: " + booleanValue);
    // ... 
    // Do your job here.
}

我明白了,但我的情况有点不同。我编辑了我的问题。 - hellzone
1
不应在getter方法中尝试执行业务逻辑。只需准备视图所需的模型,并让视图按原样呈现它。在您的情况下,您需要 value ="#{dataRow.booleanValue}",它已经在设置为bean属性之前很长时间计算出来了。 - BalusC
@BalusC 如果我没记错的话,如果你将“readonly”设置为true,你可以使用一个方法。你能确认一下吗?我现在没有测试台。 - RinaldoDev
@hellzone 是的,抱歉,只有 h:selectBooleanCheckBox 有这个功能。 :) - RinaldoDev

3
你不能这样做。 value 需要一个值表达式,而不是一个方法表达式
想一想,如果它是一个方法,那么这个属性会被如何写入?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接