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>