ValueChangeListener,用于<a4j:repeat>标记中Collection中的特定项

时间:2015-12-17 08:51:15

标签: jsf richfaces valuechangelistener

如何通过标准决定在Driver中设置特定List<Driver>的字段?没有我自己的属性:

<f:attribute name="hashCode" value="#{driver.hashCode()}"/>

Java BackBean:

public class BackBean {
    List<Driver> drivers;

    public List<Driver> getDrivers() {
        List<Driver> drivers = new ArrayList<Driver>();
        ...
        return drivers;
    }

    public void licenceReplacedCheckBoxChanged(ValueChangeEvent e) {
        Boolean driverDocChanged = (Boolean) e.getNewValue();

        int hashCode = (Integer) e.getComponent().getAttributes().get("hashCode");

        for (Driver buff : getDrivers()) {
            boolean findDriver = ( buff.hashCode() == hashCode );
            if (findDriver) {
                buff.setDocumentReplaced(driverDocChanged);
                buff.makeChangeDriver();
            }
        }
    }
}

XHTML:

<a4j:repeat value="#{backBean.drivers}" var="driver" rowKeyVar="rowDriver" id="drivers">
...
    <div class="controls one-control-group">
        <h:selectBooleanCheckbox value="#{driver.documentReplaced}"                 
            valueChangeListener="#{backBean.licenceReplacedCheckBoxChanged}">
            <f:attribute name="hashCode" value="#{driver.hashCode()}"/>
            <a4j:ajax execute="@this" render="..." />
        </h:selectBooleanCheckbox>
    </div>
...
</a4j:repeat>

1 个答案:

答案 0 :(得分:2)

只需在<a4j:ajax listener>中调用所需的方法。

<h:selectBooleanCheckbox value="#{driver.documentReplaced}">                 
    <a4j:ajax execute="@this" listener="#{driver.makeChangeDriver}" render="..." />
</h:selectBooleanCheckbox>

另见:

尽管如此,您可以尝试通过#{driver}本身而不是其哈希码。

<f:attribute name="driver" value="#{driver}" />

这只是一种不必要的绕道。