使用托管Java Bean在重复控件中设置/获取值

时间:2015-07-24 19:02:15

标签: java xpages

我对XPage有一个重复控制:

    <xp:repeat id="DriverRepeat" var="rowData" indexVar="rowIndex" value="#{javascript:requestBean.getDrivers();}">
        <xp:label value="#{javascript:rowData.driverInfo}" />
        <xp:inputText value="#{requestBean.driverChanges}" />
    </xp:repeat>

我有一个绑定到XPage的托管bean(requestBean)。我可以使用value="#{requestBean.driverChanges}"和我的Java bean读取/保存其他非重复控制值:

private String driverChanges;

吸气/ setter方法:

public void setDriverChanges(String driverChanges) {
    this.driverChanges = driverChanges;
}

public String getDriverChanges() {
    return driverChanges;
}

加载值:

setDriverChanges(doc.getItemValueString("DriverChanges"));

保存价值:

doc.replaceItemValue("DriverChanges", driverChanges);

但这不适用于重复控制字段,因为它们是多值的。我尝试将driverChanges设为Vector,但我不确定如何使用托管bean构造inputText字段值。提前感谢任何想法。

1 个答案:

答案 0 :(得分:4)

根据您的问题和您的意见,您有一个requestBean,它代表一个Request文档。该文档有两个多值字段

  • DriverInfo
  • DriverChanges

多值列表的每个元素代表一个驱动程序。第一个驱动程序的信息位于DriverInfo的第一个元素中,第一个驱动程序的更改位于DriverChanges的第一个元素中,依此类推。

DriverInfo    DriverChanges
driver1       changes1
driver2       changes2
driver3       changes3

您想创建一个重复控件,在单独的行中显示每个驱动程序的数据

enter image description here

将您的requestBean更改为

public class RequestBean implements Serializable {
    ...

    private Vector<String> driverInfo;
    private Vector<String> driverChanges;

    public Vector<String> getDrivers() throws Exception {
        ...
        setDriverInfo(doc.getItemValue("DriverInfo"));
        setDriverChanges(doc.getItemValue("DriverChanges"));
        return driverInfo;
    }

    public void setDriverInfo(Vector<String> driverInfo) {
        this.driverInfo = driverInfo;
    }

    public Vector<String> getDriverInfo() {
        return driverInfo;
    }

    public void setDriverChanges(Vector<String> driverChanges) {
        this.driverChanges = driverChanges;
    }

    public Vector<String> getDriverChanges() {
        return driverChanges;
    }

    public void save() throws Exception {
        ...
        doc.replaceItemValue("driverInfo", getDriverInfo());
        doc.replaceItemValue("driverChanges", getDriverChanges());
        doc.save();
    }
}

并将重复控件更改为

<xp:repeat
    id="DriverRepeat"
    var="rowData"
    indexVar="rowIndex"
    value="#{javascript:requestBean.getDrivers()}">
    <xp:label value="#{rowData}" />
    <xp:inputText value="#{requestBean.driverChanges[rowIndex]}" />
    <br />
</xp:repeat>

requestBean.getDrivers()返回一个driverInfos向量。 rawData保存重复内部当前驱动程序的driverInfo requestBean.driverChanges[rowIndex]调用requestBean的方法getDriverChanges(),返回一个driverChanges的Vector,并仅使用rowIndex选择当前驱动程序的值。