页面访问
请求路径 | search.htm
请求方式 | GET
请求参数 | 参数表
请求失败返回 | 跳转到message模板页显示错误
请求成功返回 | 话题分页 | 变量：searchResultPage 类型：PageView
搜索关键词 | 变量：keyword 类型：String

页面访问 - AJAX方式
请求路径 | search.htm
请求方式 | GET
自定义请求头 | 协议头：X-Requested-With 值：XMLHttpRequest
请求参数 | 参数表
请求返回 | JSON格式值 类型:Map<String,Object> | 键参数：success 值内容说明：成功返回true 失败返回false 值类型：String
键参数：error 值内容说明：错误值集合 值类型：Map<String,String>
键参数：searchResultPage 值内容说明：话题分页 值类型：PageView

分页 PageView
变量 | 类型 | 说明
--- | --- | ---
records | List<SearchResult> | 数据展示列表
pageIndex | PageIndex | 页码索引
totalpage | long | 总页数
maxresult | long | 每页显示记录数
currentpage | long | 当前页
pagecount | long | 页码显示总数
onUrl | String | 上一页URL
nextUrl | String | 下一页URL

分页索引 PageIndex
变量 | 类型 | 说明
--- | --- | ---
startindex | long | 分页开始索引
endindex | long | 分页结束索引

搜索结果 SearchResult
变量 | 类型 | 说明
--- | --- | ---
indexModule |  | Integer | 索引模块 10:话题
topic | Topic | 话题
indexModule |  | Integer | 索引模块 20：问题
question | Question | 问题

话题 Topic
变量 | 类型 | 说明
--- | --- | ---
id | Long | 话题Id
title | String | 标题；本字段高亮字符用<B></B>标签包裹，字段在搜索时已进行安全过滤，可以加上<#noescape>标签关闭转义，以输出html标签
tagId | Long | 标签Id
tagName | String | 标签名称
content | String | 话题内容；本字段高亮字符用<B></B>标签包裹，字段在搜索时已进行安全过滤，可以加上<#noescape>标签关闭转义，以输出html标签。搜索结果不显示隐藏标签内的内容
summary | String | 内容摘要(不含隐藏标签内的内容)
postTime | Date | 发表时间
lastReplyTime | Date | 最后回复时间
commentTotal | Long | 评论总数
allow | boolean | 允许评论
viewTotal | Long | 查看总数
userName | String | 用户名称
account | String | 账号
userRoleNameList | List<String> | 用户角色名称集合
allowRoleViewList | List<String> | 话题允许查看的角色名称集合(默认角色除外)
nickname | String | 呢称
avatarPath | String | 头像路径 | 页面上显示200*200头像示例${topic.avatarPath}${topic.avatarName} 显示100*100头像示例${topic.avatarPath}100x100/${topic.avatarName}
avatarName | String | 头像名称
isStaff | boolean | 是否为员工

问题 Question
变量 | 类型 | 说明
--- | --- | ---
id | Long | 问题Id
title | String | 标题；本字段高亮字符用<B></B>标签包裹，字段在搜索时已进行安全过滤，可以加上<#noescape>标签关闭转义，以输出html标签
content | String | 话题内容；本字段高亮字符用<B></B>标签包裹，字段在搜索时已进行安全过滤，可以加上<#noescape>标签关闭转义，以输出html标签。搜索结果不显示隐藏标签内的内容
summary | String | 内容摘要
postTime | Date | 发表时间
lastAnswerTime | Date | 最后回答时间
answerTotal | Long | 回答总数
allow | boolean | 允许回答
viewTotal | Long | 查看总数
userName | String | 用户名称
account | String | 账号
userRoleNameList | List<String> | 用户角色名称集合
nickname | String | 呢称
avatarPath | String | 头像路径 | 页面上显示200*200头像示例${question.avatarPath}${question.avatarName} 显示100*100头像示例${question.avatarPath}100x100/${question.avatarName}
avatarName | String | 头像名称
isStaff | boolean | 是否为员工
essence | Boolean | 是否为精华

页面访问 搜索 错误值 error
变量 | 类型 | 说明
--- | --- | ---
message | String | 搜索错误

请求参数
参数 | 类型 | 是否必填 | 说明
--- | --- | --- | ---
keyword | String | 是 | 搜索关键词
page | Integer | 否 | 页码

## 示例

<#-- 搜索结果分页 --> <#if searchResultPage?exists && searchResultPage.records?exists && searchResultPage.records?size gt 0> <#list searchResultPage.records as searchResult> <#if searchResult.indexModule == 10> <#assign topic = searchResult.topic> <a href="thread?topicId=${topic.id}" class="title"> 【${topic.tagName}】<span><#noescape>${topic.title}</#noescape></span> </a> <#-- 话题内容 因为要高亮显示，所以不转义--> <#noescape>${topic.content}</#noescape> <#elseif searchResult.indexModule == 20> <#assign question = searchResult.question> <a href="question?questionId=${question.id}" class="title"> <span><#noescape>${question.title}</#noescape></span> </a> <#-- 问题内容 因为要高亮显示，所以不转义--> <#noescape>${question.content}</#noescape> </#if> </#list> </#if> <#-- 搜索话题和问题 --> <input type="text" id="keyword" value="${keyword}" onkeydown="javascript:if(event.keyCode==13){ search();}"> <input type="button" value="搜索" class="button" onclick="search();return false"> <script type="text/javascript" language="javascript"> //搜索跳转 function search(){ var content = document.getElementById("keyword").value; if(trim(content) == ""){ return; } //获取系统路径 注意所有网页head标签内都要加入<base href="">标签 var basePath = getBasePath(); //参数 basePath = basePath+"search?keyword="+encodeURIComponent(content); window.location.href = basePath; return; } </script>