仅在编辑框

时间:2017-01-18 02:55:36

标签: xpages

我有一个表单,有一个名为uppercase_value的字段。在该字段中,我将@UpperCase(uppercase_value)放在输入转换中,因为我需要该字段中的值仅为大写。

在xpage中,我有一个编辑框和一个按钮。编辑框使用简单数据绑定(绑定到uppercase_value),按钮用于保存值。

现在我必须阻止按钮保存重复值或空值,我在编辑框附近放置一个计算字段,并将以下代码放在按钮中。

//get the value from the edit box
var newvalue = getComponent("inputText1").getValue();

//if edit box is empty, show message in the computed field
if(newvalue =="" || newvalue ==null)
{
    getComponent("computedField1").setValue("The field is empty");
}
else
{
    //check the value whether it is already existed or not
    //use @DbLookup to find, newvalue is the keyword 
    var existedvalue = @DbLookup(@DbName(),"myview", newvalue,3 );

    //if the newvalue is same as the existedvalue, show message in the computed field
    if(newvalue == existedvalue)
    {
        getComponent("computedField1").setValue("Duplicate value");
    }
    else
    {
        document1.save();
    }
}

我运行代码,我输入小写的值,它按预期将其保存为大写(例如,我在编辑框中键入abc,它返回值为ABC)。我刷新xpage并再次输入相同的值,它可以保存值,我可以发现视图中有两个相同的值。

我仔细检查@DbLookup中的视图,第一列已排序,所以我很确定@DbLookup工作正常。

我认为它可以保存重复值的原因是在运行表单验证中,我选择文档保存。因此,每次在编辑框中键入一些值后单击“保存”按钮,它会将值更改为uppcase,然后保存。因此,如果我刷新页面并再次键入一些值,因为我输入小写,@ DbLookup"认为"它是一个新值,因此它保存了值,因此视图中存在重复值。

但是如果我在运行表单验证中将文档保存更改为文档加载。这是行不通的。我的意思是它不会将值更改为大写并保存小写值。

实际上我还有另外一个关于改为大写的想法。我打算在编辑框中使用onkeypress事件。我尝试强制用户在编辑框中输入值时打开大写锁定按钮

我遵循此table并将以下代码放在onkeypress事件中。

 if  (thisEvent.keyCode == 20 )
{
    //alert("caps lock button pressed");
    return true; // not work, still can type lowercase
//   event.returnValue = true; // cannot type anything 
}
else
{
    return false;
//    event.returnValue = false; // cannot type anything
}

但是,它无法正常工作,我可以在编辑框中输入小写。

那么如何以大写形式保存值并防止保存重复值?

1 个答案:

答案 0 :(得分:1)

有多种选择。

  • 将上部外壳更改为onBlur事件
  • 使用Dojo文本框组件,它允许您在所有属性(uppercase="true")中设置格式
  • 在将值与@DbLookup
  • 的结果进行比较之前,请使用@UpperCase()
  • 使用允许不区分大小写的比较的字符串比较库(我个人使用Java并且始终包含Apache的StringUtils,但是有一个内置的IBM Java StringUtil类可以提供该功能)
  • 使用Domino对象模型(database.getView()View.getDocumentByKey(value, true))获取任何匹配项,然后检查UNID是否相同。 OpenNTF Domino API通过View.checkUnique()
  • 提供了开箱即用的功能

作为奖励,如果您正在运行Domino 9.0.x(或带有扩展库的8.5.3),则会出现@ErrorMessage(),它允许您抛出将出现在显示错误中的验证错误消息控制而不是使用计算字段。 getComponent("intputText1").setValid(false)也会将该组件标记为错误。