java 使用XPages中bean中的DataObject将文档项值加载到Map中

bzzcjhmw  于 2023-05-27  发布在  Java
关注(0)|答案(1)|浏览(133)

我正在尝试创建一个bean,它使用DataObject从文档中收集值。
代码的灵感来自于此post

package com.consili;
import lotus.domino.*;

import java.util.*;
import com.ibm.xsp.extlib.util.ExtLibUtil;
import java.io.*;
import com.ibm.xsp.model.DataObject;

public class ConfigBean implements DataObject, Serializable { 

    private static final long serialVersionUID = 1L;
    private static HashMap<Object,Object> config = null; 

    public ConfigBean() throws NotesException, IOException, ClassNotFoundException{ 
        config = new java.util.HashMap<Object,Object>(); 
        readFromDocument(); 
    }

    public void readFromDocument() throws NotesException, IOException, ClassNotFoundException{ 
        Database db = ExtLibUtil.getCurrentSession().getCurrentDatabase(); 
        View view = db.getView("Settings"); 
        Document doc = view.getFirstDocument();
        if(doc==null) throw new IllegalArgumentException("doc cannot be null.");
        
        if(doc!=null){
            Iterator<Item> items = doc.getItems().iterator(); 
            while(items.hasNext()){
                Item item =  items.next(); 
                setValue(item.getName(), item.getValueCustomData()); 
            }                 
            doc.recycle(); 
            view.recycle(); 
            db.recycle(); 
        }
    }

    public void saveToDocument(){ 
        //.. write the HashMap back to your document. 
    }

    @Override
    public Object getValue(Object key) {
        if (key == null) {
            throw new IllegalArgumentException("Key cannot be null.");
        } 
        return config.get(key); 
    }

    @Override
    public boolean isReadOnly(Object arg0) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void setValue(Object key, Object value) {
        
        if (key == null  || value == null) {
               throw new IllegalArgumentException("Key or value cannot be null.");
        } 
        config.put(key.toString(), value); 
    }

    @Override
    public Class<ConfigBean> getType(Object id) {
          return ConfigBean.class;
    }
 }

faces-config:

<managed-bean>
    <managed-bean-name>Config</managed-bean-name>
    <managed-bean-class>com.consili.ConfigBean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
  </managed-bean>

设置文档中的表单包含两个字段Title和WebUrl,如果我向xpage添加一个输入框,则会抛出类未找到异常
javax.faces.FacesException:javax.faces.FacesException:无法创建类的示例:'com.consili.ConfigBean'..零

<xp:inputText id="inputText1" value="#{Config.Title}"></xp:inputText>

我注意到如果我注解掉这一行

setValue(item.getName(), item.getValueCustomData());

页面工作并显示输入框,但不会设置Map值。
有什么不对吗
一个侧记,如果我显示的网页作为预览在网页浏览器而不是服务器的客户端崩溃与以下错误

roqulrg3

roqulrg31#

我只是快速浏览了一下你的代码-它似乎OK...(或者更确切地说,我也无法发现这个问题)。
Tim Tripcony最初描述了相同的功能,但repo已被删除。然而,我发现Harald Reisinger在他的GitHub上放了一个copy of it:-)
也许你可以通过玩这个代码来得到更进一步的东西?这就是我们使用的代码的最初灵感;- )
/约翰

相关问题