我正在开发一个 JSF 2.0 网络应用程序,我在传递一个由用“|”分隔的不同单词组成的字符串时遇到了问题使用 servlet 到 jQuery 的自动完成。它在 IE 中运行良好,但似乎无法在 Firefox 中检索任何数据。
我的 XHTML 文件是:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<ui:composition template="/WEB-INF/templates/base.xhtml">
<ui:define name="head">
<script>
$(document).ready(function(){
//var availableTags = "yes|maybe|no".split('|');
$.ajax({
type: 'POST',
cache: 'false',
data: 'codeType=allergyList',
url: '/miloWeb/Autocomplete',
async: false,
success: function(data){
availableTags = data.split('|');
},
error: function (xhr, ajaxOptions, thrownError){
alert(ajaxOptions);
}
});
$("#pAllergy").autocomplete({
source: availableTags
});
});
</script>
</ui:define>
<ui:define name="content">
<h2>Allergy List</h2>
<div>
<center>
<br />
<br />
<h:outputText styleClass="description" for="pAllergy">Allergy: </h:outputText>
<h:inputText id="pAllergy" value="#{allergyListBB.allergyList.allergy}" size="30"></h:inputText>
</tr>
<tr>
<td><button onclick="return false;" id="addAllergy">Add</button> </td>
</tr>
</table>
</center>
<h:inputHidden id="delId" value="#{allergyListBB.rowId}"></h:inputHidden>
</div>
</ui:define>
代码的最后一部分所做的是进入我的 Servlet 并从数据库中检索一个字符串(即 cheese|chocolate|chery|chestnut| ),然后将其放入变量 availableTags
中我们传递给自动完成的内容。
我的 servlet 看起来像这样:
package com.bravo.servlets;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.bravo.codeMaster.codeMaster;
import com.bravo.dropdowns.codeMedicationList;
/**
* Servlet implementation class Autocomplete
*/
@WebServlet("/Autocomplete")
public class Autocomplete extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Autocomplete() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getOutputStream().print("Unauthorized Access.");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String codeType = request.getParameter("codeType");
response.getOutputStream().print(codeMaster.getStringList(codeType));
// This might as well be "response.getOutputStream().print("one|two|three|")
// for testing purposes, just to make sure it's returning something.
}
}
XTRA COMMENTS:在我看来,如果我将变量 availableTags
设置为任何字符串,当我设置 $("#pAllergy").autocomplete() 时,我可以'不要改变它。所以我需要从 Servlet 中获取正确的字符串。请帮帮我,我似乎无法弄清楚为什么它在 Firefox 而不是在 IE 中失败。非常感谢您的帮助!
最佳答案
尝试:
//...
dataType: 'text',
success: function(data){
var availableTags = data.split('|');
$("#pAllergy").autocomplete({
source: availableTags
});
},
//...
关于JavaScript 在使用 jQuery ui 自动完成的 Firefox 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7700876/