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>
我的数据库允许匿名访问数据库并提交表单以进行处理 它在 [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>