Xpages Xpage中的只读字段未提交

Xpages Xpage中的只读字段未提交,xpages,readonly,Xpages,Readonly,我的Xpage中有一个字段,我希望它是只读的,并在保存时提交到数据库。此字段从Ajax调用中获取一个值 将属性ReadOnly设置为true将创建一个,而不是一个只读字段 设置属性“Show disabled control for readonly”将创建一个属性为readonly=readonly的输入文本字段 <input type="text" class="xspInputFieldEditBox" readonly="readonly" name="view:_id1:_id2

我的Xpage中有一个字段,我希望它是只读的,并在保存时提交到数据库。此字段从Ajax调用中获取一个值

将属性ReadOnly设置为true将创建一个
,而不是一个只读字段

设置属性“Show disabled control for readonly”将创建一个属性为readonly=readonly的输入文本字段

<input type="text" class="xspInputFieldEditBox" readonly="readonly" name="view:_id1:_id2:_id3:_id28:callbackFieldControlSet:InstrumentShort" id="view:_id1:_id2:_id3:_id28:callbackFieldControlSet:InstrumentShort">

它将不会保存到数据库中

据我所知,只读字段已提交,但未禁用

我做错了什么

/我认为这是一个错误。你是对的。在8.5.1版中,当“Show disabled control for readonly”属性不存在时,我通过JavaScript将该字段设置为只读。下面是代码片段:

<xp:scriptBlock id="scriptBlock1">
    <xp:this.value><![CDATA[function makeFieldReadOnly() {
    document.getElementById("#{id:inputText2}").readOnly = true;
}
window.onload = makeFieldReadOnly;]]></xp:this.value>
</xp:scriptBlock>

在上面的代码片段中,函数
makeFieldReadOnly
在加载页面时将编辑框
inputext2
标记为只读。

我认为这是一个错误。你是对的。在8.5.1版中,当“Show disabled control for readonly”属性不存在时,我通过JavaScript将该字段设置为只读。下面是代码片段:

<xp:scriptBlock id="scriptBlock1">
    <xp:this.value><![CDATA[function makeFieldReadOnly() {
    document.getElementById("#{id:inputText2}").readOnly = true;
}
window.onload = makeFieldReadOnly;]]></xp:this.value>
</xp:scriptBlock>

在上面的代码段中,函数
makeFieldReadOnly
在加载页面时将编辑框
inputExt2
标记为只读。

您可以使用attr属性添加只读属性:

<xp:inputText id="inputText2" value="#{document1.ReadOnly}">
   <xp:this.attrs>
      <xp:attr name="readonly" value="true" />
   </xp:this.attrs>
</xp:inputText>

顺便说一句:disabled和readonly属性的行为是正确的,因为这是服务器端的定义。您希望使用值编辑组件,这就是为什么必须允许它接受值的原因。仅在客户端禁用它在技术上没有效果。

您可以使用attr属性添加readonly属性:

<xp:inputText id="inputText2" value="#{document1.ReadOnly}">
   <xp:this.attrs>
      <xp:attr name="readonly" value="true" />
   </xp:this.attrs>
</xp:inputText>


顺便说一句:disabled和readonly属性的行为是正确的,因为这是服务器端的定义。您希望使用值编辑组件,这就是为什么必须允许它接受值的原因。仅在客户端禁用它在技术上没有效果。

该链接仅描述了只读组件应在表单数据中提交。它只描述客户端。@SvenHasselbach:噢。。。刚才在DominoDesigner中看到了对只读复选框悬停的描述——“禁止用户更改,并且提交时不保存值……”。IBM为什么决定这样做,因为保存只读字段的值将是标准行为?我同意Sven的观点。服务器端的只读设置应该是这样的。@SvenHasselbach:我使用脚本块将日期字段设置为只读,以便我们能够强制用户仅通过选择器进行日期选择。在扩展库中,我还使用它将与名称选择器和值选择器关联的文本字段设置为只读,以便用户选择值(通过选择器),而不是输入它们。有更好的方法吗?@MikaelGrevsten:没有。如果我在应用程序中有一些字段,并且这些字段不允许更改(为什么),那么信任HTML输入字段的“readonly”属性是一个安全问题。服务器不知道是谁发送请求(浏览器、工具等)。客户端验证也存在同样的问题。举个例子:我不知道你对模型和所有者做了什么,但是如果Typeahead失败了(连接问题f.e.),该怎么办?可能发生的情况是,您存储的车牌上有错误的汽车和车主信息。您需要验证服务器端的信息……该链接仅描述了应在表单数据中提交只读组件。它只描述客户端。@SvenHasselbach:噢。。。刚才在DominoDesigner中看到了对只读复选框悬停的描述——“禁止用户更改,并且提交时不保存值……”。IBM为什么决定这样做,因为保存只读字段的值将是标准行为?我同意Sven的观点。服务器端的只读设置应该是这样的。@SvenHasselbach:我使用脚本块将日期字段设置为只读,以便我们能够强制用户仅通过选择器进行日期选择。在扩展库中,我还使用它将与名称选择器和值选择器关联的文本字段设置为只读,以便用户选择值(通过选择器),而不是输入它们。有更好的方法吗?@MikaelGrevsten:没有。如果我在应用程序中有一些字段,并且这些字段不允许更改(为什么),那么信任HTML输入字段的“readonly”属性是一个安全问题。服务器不知道是谁发送请求(浏览器、工具等)。客户端验证也存在同样的问题。举个例子:我不知道你对模型和所有者做了什么,但是如果Typeahead失败了(连接问题f.e.),该怎么办?可能发生的情况是,您存储的车牌上有错误的汽车和车主信息。您需要验证服务器端的信息…这是什么版本?在8.5.2上,当我使用这个代码段时,我得到以下错误:“未知属性this.attrs。它没有在标记xp:inputText上定义。”@rfk:attrs属性是在8.5.3中引入的。这就是为什么它不能使用8.5.2或更低版本。这是什么版本?在8.5.2上,当我使用这个代码段时,我得到以下错误:“未知属性this.attrs。它没有在标记xp:inputText上定义。”@rfk:attrs属性是在8.5.3中引入的。这就是为什么它不能使用8.5.2或更低版本。