Sun Java System Web Server 包含一个提供基本搜索查询和搜索结果页面的默认搜索应用程序。可以直接使用这些 Web 页面,也可以对其进行自定义以满足特定需要。这种自定义可以像使用不同徽标重新设置 Web 页面一样简单,也可以像更改搜索结果的显示顺序一样复杂。
默认搜索应用程序提供了样例 JSP,这些样例 JSP 说明了如何使用搜索标记库来建立自定义的搜索界面。您可以参见位于 /bin/https/webapps/search 的默认搜索应用程序,该样例应用程序说明了如何使用可自定义的搜索标记。
默认搜索界面由四个主要的部分组成: 标题、页脚、查询表单和结果。
只需更改标记的属性值即可轻松地自定义这些基本元素。可以使用标记库实现更为详细的自定义。
搜索界面包含以下组件:
标题包括徽标、标题和简短说明。
页脚包含版权信息。
查询表单包含一组代表搜索集合的复选框、一个查询输入框以及“提交”和“帮助”按钮。
默认情况下每页列出 10 条记录。对于每条记录,将显示以下信息:标题、段落、大小、创建日期和 URL。段落是页面的一个小片段,其中包含高亮显示的匹配文字。
查询表单包含一个搜索集合的复选框列表、一个查询输入框和“提交”按钮。表单是使用 <s1ws:form> 标记以及 具有默认值的 <collElem>、<queryBox> 和 <submitButton> 标记创建的:
<s1ws:form> <s1ws:collElem> <s1ws:queryBox> <s1ws:submitButton> </s1ws:form>
可以将查询表单放在页面的任意位置:中间、边栏等等。也可以以不同格式显示查询表单,例如使用一个横栏,其中集合选择框、查询字符串输入框以及“提交”按钮被水平排列;或显示为一个块,其中集合显示为复选框,查询输入框和“提交”按钮位于下方。
以下示例显示了如何使用 <searchForm> 标记组来创建不同格式的查询表单。
下面的样例代码将创建一个表单,其中包含一个所有集合的选择框、一个查询输入框和一个“提交”按钮,它们排列在一行中。
<s1ws:form> <table cellspacing="0" cellpadding="3" border="0"> <tr class="navBar"> <td class="navBar"><s1ws:collElem type=”select”></td> <td class="navBar"> <s1ws:querybox size="30"> <s1ws:submitButton class="navBar" style="padding: 0px; margin: 0px; width: 50px"> </td> </tr> </table> </s1ws:form>
您可以创建一个表单块,其中表单元素排列在一个边栏中,表单块的标题为“搜索”,使用的格式与边栏中其他项的格式相同。
在下面的样例代码中,表单主体包含三个排成一列的复选框,列出了可用的搜索集合。查询输入框和“提交”按钮位于下方:
<s1ws:searchForm> <table> <!--... other sidebar items ... --> <tr class="Title"><td>Search</td></tr> <tr class="Body"> <td> <table cellspacing="0" cellpadding="3" border="0"> <tr class="formBlock"> <td class="formBlock"> <s1ws:collElem type="checkbox" cols="1" values="1,0,1,0" /> </td> </tr> <tr class="formBlock"> <td class="formBlock"> <s1ws:querybox size="15" maxlength="50"> </td> </tr> <tr class="formBlock"> <td class="formBlock"> <s1ws:submitButton class="navBar" style="padding: 0px; margin: 0px; width: 50px"> </td> </tr> </table> </td> </tr> </table> </s1ws:searchForm>
搜索结果的生成过程如下:
<formAction> 标记检索所有表单元素的值并进行基本验证。
<formAction> 标记中出现的 <search> 标记、<resultIteration> 标记和其他标记可以访问所有表单元素的值。
<search> 标记通过 <formAction> 使用查询字符串和集合来执行搜索,并将搜索结果保存在 pageContext 中。
<resultIteration> 标记随后对结果集进行检索并重新显示。
只需更改标记的属性值即可自定义搜索结果页面。
以下样例代码以标题栏开始,随后显示一些指定的记录,最后显示导航栏。标题栏包含搜索中使用的查询字符串以及返回的总记录数范围,例如,1-10。对于每条记录,记录部分将显示标题(带有指向该文件的链接)、最多三个高亮显示关键字的段落、URL、创建日期以及文档大小。
在该部分的末尾,导航栏提供了指向上一页和下一页的链接,以及指向当前页之前和之后八个其他页面的直接链接。
<s1ws:formAction /> <s1ws:formSubmission success="true" > <s1ws:search scope="page" /> <!--search results--> (...html omitted...) <s1ws:resultStat formId="test" type="total" /></b> Results Found, Sorted by Relevance</span></td><td> <span class="body"><a href="/search/search.jsp?">Sort by Date</a></span></td> <td align="right"><span class="body"> <s1ws:resultNav formId="test" type="previous" caption="<img border=0 src=\\"images/arrow-left.gif\\" alt=\\"Previous\\">" /> <s1ws:resultStat formId="test" type="range" /> <s1ws:resultNav formId="test" type="next" caption="<img border=0 src=\\"images/arrow-right.gif\\" alt=\\"Next\\">" /> <!img alt="Next" src="images/arrow-right.gif" border="0" WIDTH="13" HEIGHT="9"> (...html omitted...) <table border=0> <s1ws:resultIteration formId="test" start="1" results="15"> <tr class=body> <td valign=top> <s1ws:item property=’number’ />. </td> <td> <b><a href="<s1ws:item property=’url’ />"><s1ws:item property=’title’ /></a></b> <br> <s1ws:item property=’passages’ /> <font color="#999999" size="-2"> <s1ws:item property=’url’ /> - <s1ws:item property=’date’ /> - <s1ws:item property=’size’ /> KB </font><br><br> </td> </tr> </s1ws:resultIteration> </table> (...html omitted...) <s1ws:resultNav formId="test" type="previous" /> <s1ws:resultNav formId="test" type="full" offset="8" /> <s1ws:resultNav formId="test" type="next" /> (...html omitted...) </s1ws:formSubmission>
通过操作标记和修改 HTML 可以轻松地自定义基本搜索结果界面。例如,可以将导航栏复制并放到搜索结果前面。用户也可以选择显示或不显示搜索记录的任何属性。
除了与表单一起使用外,<search>、<resultIterate> 和相关标记还可用于列出特定的主题。以下样例代码列出了某个站点上有关 Java Web 服务的头十篇文章。
<s1ws:search collection="Articles" query="Java Web Services" /> <table cellspacing="0" cellpadding="3" border="0"> <tr class="Title"><td>Java Web Services</td></tr> </table> <table cellspacing="0" cellpadding="3" border="0"> <s1ws:resultIteration> <tr> <td><a href="<s1ws:item property=’URL’ />"> <s1ws:item property=’Title’/></a></td> </tr> </s1ws:resultIteration> </table>
如果需要将表单页面和结果页面分开,必须使用 <form> 标记组创建表单页面,使用 <formAction> 标记组创建结果页面。
需要在结果页面中添加指向表单页面的链接以使页面衔接顺畅。
请注意以下标记惯例:
标记类属于 com.sun.web.search.taglibs 软件包。
所有 pageContext 属性均具有 com.sun.web 前缀。例如,搜索结果的属性为 com.sun.web.searchresults.form_id,其中 form_id 为表单的名称。
可以使用 s1ws 前缀来引用标记库。标记的名称及其属性是大小写混合的,其中每个内部单词的首字母大写,例如,pageContext。
Sun Java System Web Server 包括一组 JSP 标记,这些标记可用于自定义搜索界面中的搜索查询和搜索结果页面。
有关可用来自定义搜索页面的 JSP 标记的完整列表,请参阅《Sun Java System Web Server 7.0 Developer's Guide to Web Applications》。