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

标签 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>

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

private String driverChanges;

setter/getter / setter/getter :

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 字段值。提前感谢您的任何想法。

最佳答案

根据您的问题和评论,您有一个代表请求文档的 requestBean。该文档有两个多值字段

  • 司机信息
  • 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 vector 。 rawData 在 repeat 中保存当前驱动程序的 driverInfo。
requestBean.driverChanges[rowIndex] 调用 requestBean 的方法 getDriverChanges(),返回一个 driverChanges vector ,并只选择当前驱动程序的 rowIndex 值。

关于java - 使用托管 Java Bean 在重复控件中设置/获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31617938/

相关文章:

java - Spark分组然后排序(Java代码)

java - 每行分割未知数量的字符串

java - XPages - 更新 Java 类设计元素

java - 如何在内部类中调用继承类的构造函数

java - 对于 Apple 的 1.5 update 4 小程序,将 apple.awt.graphics.UseQuartz 设置为 false

download - XPages-xp :fileDownload Control in xp:repeat Control

java - 找不到 bundle java.util.PropertyResourceBundle 的资源

Xpages 和 EL : Syntax for retrieving HashMap Values

java - 如何方便地从LinkedHashMap中获取第一个元素或最后一个元素?

java - Xpages 脱离服务器端缓存