Ошибка установленного значения Xpages?

1

Изображение 174551

Моя база данных позволяет анонимным обращаться к базе данных и отправлять форму для выполнения процесса. У нее есть три роли внутри [Заявитель], [Админ], [Рецензент]

проблема:

Мне нужно обновить поле "Электронная почта", объединив 3 разных поля "почта", чтобы объединить их. Поэтому я использую элемент add, но он, похоже, сохраняет неправильные данные, он дает дополнительную [претенденту]. Прикрепленное изображение покажет, как оно отображается

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)

    }       

Я использую serveride javascript для сохранения документа. Но во время сохранения добавьте дополнительную информацию внутри системы.

Теги:
xpages
xpages-ssjs

3 ответа

4
Лучший ответ

Я думаю, что ваш код нуждается в некоторой оптимизации. Этот код делает то же, что и ваш:

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 родной.

3

Где создан ваш вектор (v)? Вы просто добавляете элементы к существующему вектору, поэтому ваш код (параметр формы, если используется параметр computeWithForm, XPage, SSJS-код) должен быть инициализирован тем, что Vector имеет значение "[Заявитель]" или получает вектор, который уже содержит "[ Заявитель] ".

Шансы кода IBM, добавляющего "[Заявитель]" к setValue() во время setValue() равны нулю. Ошибка почти наверняка в вашем коде приложения, не введенном setValue(). Поиск Eclipse должен помочь определить, где код приложения устанавливает это значение.

  • 0
    я объявляю v как переменную [var v], затем только с кодом .... это как пойти получить мои роли, чтобы обновить его ~
  • 0
    я уже использую эту переменную в каком-то месте, чтобы сохранить дополнительное значение внутри! Спасибо за помощь
1

Создайте объект с привязкой к запросу.

Лица-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");
    }

}

Свяжите действие обработчика событий с методом, которым вы предназначаете для сохранения документа:

страница 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>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню