保存CheckboxGroup值XPages

时间:2014-11-03 16:00:05

标签: xpages

我正在开发我的第一个Notes / XPages / Java应用程序,并且我陷入了一些基本的'crud'级别。以下是托管bean的一部分。我可以将数据加载到XPage,但保存Checkbox字段会导致我出现问题,即它不会保存。我假设它与数据类型有关,因为CheckboxGroup是多值的。

表单字段是: 类别 就业角色

变量

public class TrainingModule implements Serializable {
private String Category;
private Object EmploymentRole;

public String getCategory() {
return Category; }

public void setCategory(final String category) {
Category = category;}

public Object getEmploymentRole() {
return EmploymentRole;}

public void setEmploymentRole(final Object employmentRole) {
EmploymentRole = employmentRole;}

加载方法

public void load(final String unid) {
    setUnid(unid);
    Document doc = null;
    try {
        doc = ExtLibUtil.getCurrentDatabase().getDocumentByUNID(getUnid());
        setCategory(doc.getItemValueString("Category"));
        setEmploymentRole(doc.getItemValue("EmploymentRole"));
etc

保存方法

public boolean saveData() {
    boolean result = false;
    Document doc = null;

    try {

        doc.replaceItemValue("Category", Category);
        doc.replaceItemValue("EmploymentRole", EmploymentRole);

        result = doc.save()

etc

的XPage

<xp:checkBoxGroup id="checkBoxGroup1" 
value="#{TrainingModule.employmentRole}">
<xp:selectItem itemLabel="Admin" itemValue="Admin">
</xp:selectItem>
<xp:selectItem itemLabel="Installation" itemValue="Installation">
</xp:selectItem>
<xp:selectItem itemLabel="Proj Man" itemValue="Proj Man">
</xp:selectItem>
</xp:checkBoxGroup>

我知道有类似的贴子,但我似乎无法将它们与我想要达到的目标联系起来。

我的下一个任务是使用Java上传和下载控件,以避免任何提示或陷阱。 任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:2)

将您的就业角色定义为ArrayList<String>类型的字段:

private List<String> employmentRoles = new ArrayList<String>();

public void setEmploymentRoles(List<String> employmentRoles) {
    this.employmentRoles = employmentRoles;
}

public List<String> getEmploymentRoles() {
    return employmentRoles;
}

使用

读取值
setEmploymentRoles(doc.getItemValue("EmploymentRole"));

并使用

保存值
doc.replaceItemValue("EmploymentRole", new Vector(getEmploymentRoles()));
是的,你不应该用大写字母开始一个字段名称。在这里查看Java naming conventions

答案 1 :(得分:0)

由于您需要加载/保存数据,因此使用对象数据源可能会更好。无论如何试试这个:

public Object[] getEmploymentRole() {
return EmploymentRole;}

public void setEmploymentRole(final Object[] employmentRole) {
EmploymentRole = employmentRole;}

无法将数组强制转换为Object,而checkboxgroup则尝试获取/设置数组。

这会导致您的保存方法略有变化:

    doc.replaceItemValue("Category", Category);
    Vector v = new Vector(Arrays.asList(EmploymentRole));
    doc.replaceItemValue("EmploymentRole", v);

让我们知道它是怎么回事