Xpages - CKEditor中的富文本验证...丢失内容

时间:2015-05-19 17:14:14

标签: ckeditor xpages

平台:Domino v9

背景:

当用户使用Xpage打开文档时,Rich Text控件(CKEditor)会显示该文档中的现有内容。

RichText字段绑定到后端Notes文档。

当用户对此内容进行任何更改并单击“更新”按钮时,将进行验证(对于此示例,我们将检查长度是否超过20个字符)。

使用ValidateExpression选项完成验证。

在验证时,用户会看到错误消息,但用户输入的新内容将丢失。 Rich Text控件显示原始内容。

验证码

<xp:this.validators>
<xp:validateExpression>
<xp:this.expression><![CDATA[#{javascript:var contentStr = value.getContentAsText();
var regex = /(<([^>]+)>)/ig ;
contentStr = contentStr.replace(regex,'');
if( contentStr.length < 20 ) {
  return true;
}else{
   return false;
}
}]]></xp:this.expression>
<xp:this.message><![CDATA[#{javascript:var errMsg  = getErrorMessageText   ('713','');
if ( errMsg != null && errMsg != "") {
//return errMsg;
return "Length cannot exceed 20 characters";
   }else{
return "Length cannot exceed 20 characters";
}}]]></xp:this.message>
</xp:validateExpression>
    </xp:this.validators>

我尝试过的事情:

我尝试过Tommy Valand博客中提到的解决方案,但这并没有解决问题。 Tommy's Blog

问题

如何在不丢失新内容的情况下验证RichText控件?

截图:

enter image description here

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:3)

当我有复杂的验证时,我有时会使用隐藏的输入字段进行验证。不确定这是否有助于这种情况,但值得一试......

getLocalValue应该在验证阶段返回转换后的值。由于您正在处理字符串,因此getSubmittedValue可能更合适/更容易使用。

如果您使用xp:message,请将for属性设置为您为隐藏字段决定的ID。

private string SendHttpRequest(string url, out int statusCode, string method = "GET", object postData = null, string contentType = "application/json")
{
    bool isPost = method.Equals("POST", StringComparison.CurrentCultureIgnoreCase);

    byte[] content = new ASCIIEncoding().GetBytes(isPost ? JsonConvert.SerializeObject(postData) : "");

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

    request.AllowAutoRedirect = true;
    request.Method = method;
    request.ContentType = contentType;
    request.ContentLength = postData == null ? 0 : content.Length;

    if (isPost && postData != null)
    {
        Stream reqStream = request.GetRequestStream();
        reqStream.Write(content, 0, content.Length);
    }

    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Throws error here

    string result;

    using (StreamReader sr = new StreamReader(response.GetResponseStream()))
    {
        result = sr.ReadToEnd();
    }
    statusCode = (int)response.StatusCode;

    response.Close();

    return result;
}

答案 1 :(得分:2)

奇怪的行为。也许您可以通过CSJS(而不是SSJS / Java)使用最近添加的代码段来验证您的RTF控件:http://openntf.org/XSnippets.nsf/snippet.xsp?id=validate-rich-text-field