XRX/检测重复
外观
< XRX
您希望在表单字段中用户输入时检测到重复项。
我们将创建一个表单,每次在字段中输入字母时都会向服务器发送请求。表单将调用 ReST 网络服务,并将当前术语作为参数传递。
以下查询可用于服务器上检测重复项。
xquery version "1.0";
declare namespace request="http://exist-db.org/xquery/request";
declare option exist:serialize "method=xml media-type=text/xml indent=yes";
let $term-name := request:get-parameter('term-name', '')
let $collection := '/db/terms'
return
if (not($term-name)) then
<error>
<message>Error: term-name argument required</message>
</error>
else
<result>{
if (collection($collection)/Term[TermName/text()=$term-name or Abbreviation/text()=$term-name])
then <true/>
else <false/>
}</result>
此查询接受一个参数,并返回一个 true 或 false 元素。
$BASENAME/xqueries/term-exists.xq?term-name=Product
如果该术语存在于数据库中,它将返回以下内容
<result>
<true/>
</result>
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:ev="http://www.w3.org/2001/xml-events" >
<head>
<title>Duplicate Detection Example</title>
<xf:model>
<xf:instance xmlns="" id="term">
<data>
<term-name>Product</term-name>
</data>
</xf:instance>
<xf:submission id="check-for-duplicate" method="get"
action="term-exists.xq"
instance="term" replace="all"/>
</xf:model>
</head>
<body>
<h1>Check Term</h1>
<xf:input ref="term-name">
<xf:label>Term: </xf:label>
</xf:input>
<xf:submit submission="check-for-duplicate">
<xf:label>Check for Dups</xf:label>
</xf:submit>
</body>
</html>
现在我们有一个简单的 XForms,它调用网络服务并返回一个 true/false 记录。我们的下一步是使此测试在用户键入时在后台发生,并在检测到重复时显示警告消息。
现在我们有两个任务。我们需要在用户输入时向服务器发送事件,并且我们需要在不中断用户的情况下将信息带回来。
首先,我们想在输入字段中添加一个事件,该事件在每次在输入字段中键入字符时发送消息
<xf:input ref="term-name" incremental="true">
<xf:label >Term: </xf:label>
<xf:action ev:event="xforms-value-changed">
<xf:send submission="check-for-duplicate"/>
</xf:action>
</xf:input>