Xpages 设置值错误?

Xpages setvalue bug?

我的数据库允许匿名访问数据库并提交表单以进行处理 它在 [Applicant],[Admin],[Reviewer]

中有 3 个角色

问题:

我需要通过合并 3 个不同的 "mail" 字段来更新 "Email" 字段。所以我使用添加元素,但它似乎保存了错误的数据,它给了一个额外的 [applicant]。附加图片将显示它的显示方式

var v;
//  Update mail 1 and mail 2 and mail3 into Email field!
if  
(
    (document1.getValue("Mail1")!=null && document1.getValue("Mail1")!="")&&
    (document1.getValue("Mail2")!=null && document1.getValue("Mail2")!="")&&
    (document1.getValue("Mail3")!=null && document1.getValue("Mail3")!="")
)   //all not empty
    {
        v.addElement(document1.getValue("Mail1")+"@brookedockyard.com.my"); 
        v.addElement(document1.getValue("Mail2")+"@brookedockyard.com.my");
        v.addElement(document1.getValue("Mail3")+"@brookedockyard.com.my"); 
        document1.replaceItemValue("Email",v)


else if
(
    (document1.getValue("Mail1")!=null && document1.getValue("Mail1")!="")&&
    (document1.getValue("Mail2")==null && document1.getValue("Mail2")=="")&&
    (document1.getValue("Mail3")===null && document1.getValue("Mail3")=="")
)   //  only have mail 1
    {
        document1.replaceItemValue("Email", document1.getValue("Mail1")+"@brookedockyard.com.my")
    }
else if
(
    (document1.getValue("Mail1")!=null && document1.getValue("Mail1")!="")&&
    (document1.getValue("Mail2")!=null && document1.getValue("Mail2")!="")&&
    (document1.getValue("Mail3")==null && document1.getValue("Mail3")=="")
)   //  only have mail 1 and mail 2
    {
        v.addElement(document1.getValue("Mail1")+"@brookedockyard.com.my"); 
        v.addElement(document1.getValue("Mail2")+"@brookedockyard.com.my"); 
        document1.replaceItemValue("Email",v)


else if
(   
    (document1.getValue("Mail1")!=null && document1.getValue("Mail1")!="")&&
    (document1.getValue("Mail2")==null && document1.getValue("Mail2")=="")&&
    (document1.getValue("Mail3")!=null && document1.getValue("Mail3")!="")
)       //  only have mail 1 and mail 3
    {
        v.addElement(document1.getValue("Mail1")+"@brookedockyard.com.my"); 
        v.addElement(document1.getValue("Mail3")+"@brookedockyard.com.my"); 
        document1.replaceItemValue("Email",v)

    }       

我正在使用服务器端 javascript 来保存文档。但是在保存过程中会在系统内部添加额外的信息。

您的 Vector (v) 是在哪里创建的?您只是向该现有 Vector 添加元素,因此您的代码(如果使用 computeWithForm、XPage 设置、SSJS 代码,则为表单设置)必须使用“[Applicant]”值初始化该 Vector 或检索已经包含“[申请人]”的价值。

IBM 代码在 setValue() 方法期间将“[Applicant]”添加到 Item 的可能性为零。该错误几乎可以肯定在您的应用程序代码中,而不是 setValue() 引入的。 Eclipse 搜索应该有助于确定应用程序代码在哪里设置该值。

我认为您的代码需要一些优化。此代码与您的相同:

var v = [];
["Mail1", "Mail2", "Mail3"].forEach(function(name) {
    if (document1.getValue(name)) {
        v.push(document1.getValue(name)+"@brookedockyard.com.my"); 
    }
});
document1.replaceItemValue("Email",v);

此外,它将变量v初始化为一个空数组。尽可能使用数组而不是向量。它更 JavaScript 原生。

创建请求范围的 bean。

人脸-config.xml

<managed-bean>
    <managed-bean-name>forgetSsjs</managed-bean-name>
    <managed-bean-class>demo.bean.ForgetSsjsBean
    </managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

豆子

package demo.bean;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import java.util.Vector;

import javax.faces.FacesException;
import javax.faces.context.FacesContext;

import lotus.domino.NotesException;

import com.ibm.commons.util.StringUtil;
import com.ibm.xsp.model.domino.wrapped.DominoDocument;
import com.ibm.xsp.util.FacesUtil;

public class ForgetSsjsBean implements Serializable {

    private static final long serialVersionUID = 1L;

    public void saveTheDoc() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        DominoDocument wrapper = (DominoDocument) FacesUtil.resolveVariable(facesContext,
                "document1");

        Set<String> emails = new HashSet<String>();

        try {           
            for (int i = 1; i < 4; i++) {
                addEmail(wrapper.getItemValueString("Mail" + i), emails);
            }

            if (!emails.isEmpty()) {
                wrapper.replaceItemValue("Email", new Vector<String>(emails));
                wrapper.save();
            }
        } catch (NotesException e) {
            throw new FacesException(e);
        }
    }

    private void addEmail(String name, Set<String> emails) {
        if (StringUtil.isEmpty(name)) {
            return;
        }

        emails.add(name + "@brookedockyard.com.my");
    }

}

Link 您对指定用于保存文档的方法的事件处理程序操作:

xsp 页面

<xp:this.data>
    <xp:dominoDocument var="document1" ... />
</xp:this.data>

...

<xp:button id="button1" value="save this thing">
    <xp:eventHandler event="onclick" submit="true"
        refreshMode="partial" action="#{forgetSsjs.saveTheDoc}" />
</xp:button>