會員註冊 / 登入  |  電腦版  |  Jump to bottom of page

JWorld@TW緊急避難所 » 關於JSP的問題

發表人: player, 十級學員
2009-08-14 15:42:03
我在試 JSP 輸出 JSON, 想接JQuery 的自動完成的外掛
可是
似乎WebLogic Server 7.0 被我弄到當掉了
因為我這邊的主機上的JSP是跑 JavaSE 1.4 所以要倒著回去用舊版的Java語法去寫, 有點小難

com.data.toolkit.SafeSql 與 com.data.toolkit.JsonUtil 算是自己改寫過的心得吧?
公布如下
http://www.player.idv.tw/prog/index.php/JsonUtil.java
http://www.player.idv.tw/prog/index.php/SafeSql.java
編譯好成 class檔後, 放到 \WEB-INF\classes\com\data\toolkit\ 目錄中

最後的實驗品是 AutoComplete.jsp
輸入 name 與 q 當傳入參數
自Oracle中取出幾個字串後
以JSON方式傳回

<%@ page contentType="application/json; charset=big5" %>

<%@ /*業務機密, 這行page import 略 */ %>
<%@ page import="java.sql.*, java.util.*, java.lang.*" %>
<%@ page import="com.data.toolkit.SafeSql, com.data.toolkit.JsonUtil" %>
<%
String strName = request.getParameter("name");
String strQ = request.getParameter("q");

if (strQ != null)
{
//業務機密, 取得Oracle資料庫連線方式的這行略 qub=?

StringBuffer sql = new StringBuffer();
String strKeyName = "";

//需求編號, reqNoQ
if (strName == "reqNoQ")
{
strKeyName = "reqno";
}

if (strKeyName != "")
{
sql.append("select * from ( ");
sql.append("select distinct ");
sql.append(strKeyName);
sql.append(" from tb_request where ");
sql.append(strKeyName);
sql.append(" like ");
sql.append(SafeSql.QuoteLikeRight(strQ));
sql.append(" order by ");
sql.append(strKeyName);
sql.append(" ) where ROWNUM >= 0 AND ROWNUM <= 20");


ArrayList v = qub.executeQuery(sql.toString());
StringBuffer responseText = new StringBuffer();

responseText.append('[');

if (!v.isEmpty())
{
boolean IsComma = false;

for(int i=0;i<v.size();i++)
{
HashMap hm = (HashMap)v.get(i);
if (hm.containsKey(strKeyName))
{
if (IsComma == true) {
responseText.append(',');
IsComma = true;
}
responseText.append(JsonUtil.string2Json(hm.get(strKeyName)));
}
}
}
responseText.append(']');

response.getWriter().print(responseText.toString());
}
else
{
response.getWriter().print("[]");
}
}
%>


此外
關於 http://kekeke.cc/twjug
不知為何
要貼任何字都貼不上了
天曉得是哪邊擋到了?

發表人: player, 十級學員
2009-08-15 20:00:49
果然寫錯了
耗呆中? orz

1.字串比較的方式錯了
2.class未公開的成員函數, 不能直接用

總算應該差不多了?


<%@ page contentType="application/json; charset=big5" %>
<%@ /*業務機密, 這行page import 略 */ %>
<%@ page import="java.sql.*, java.util.*, java.lang.*" %>
<%@ page import="com.data.toolkit.SafeSql, com.data.toolkit.JsonUtil" %>
<%
String strName = request.getParameter("name");
String strQ = request.getParameter("q");
boolean IsOutput = false;

if (strQ != null)
{
//業務機密, 取得Oracle資料庫連線方式的這行略 qub=?

StringBuffer sql = new StringBuffer();
String strKeyName = "";


//需求編號, reqNoQ
if (strName.compareToIgnoreCase("reqNoQ") == 0)
{
strKeyName = "reqno";
}

if (strKeyName != "")
{
sql.append("select * from ( ");
sql.append("select distinct ");
sql.append(strKeyName);
sql.append(" from tb_request where ");
sql.append(strKeyName);
sql.append(" like ");
sql.append(SafeSql.QuoteLikeRight(strQ));
sql.append(" order by ");
sql.append(strKeyName);
sql.append(" ) where ROWNUM >= 0 AND ROWNUM <= 20");


// ArrayList v = qub.executeQuery(sql.toString());
// 測試用
ArrayList v = new ArrayList();
HashMap hm2 = new HashMap();
hm2.put("reqno", sql.toString());
v.add(hm2);

StringBuffer responseText = new StringBuffer();

responseText.append('[');

if (!v.isEmpty())
{
boolean IsComma = false;

for(int i=0;i<v.size();i++)
{
HashMap hm = (HashMap)v.get(i);
if (hm.containsKey(strKeyName))
{
if (IsComma == true) {
responseText.append(',');
IsComma = true;
}
responseText.append(JsonUtil.toJson(hm.get(strKeyName)));
}
}
}
responseText.append(']');

IsOutput = true;
response.getWriter().print(responseText.toString());
}
}

if (IsOutput == false)
{
response.getWriter().print("[]");
}
%>




會員註冊 / 登入  |  電腦版  |  Jump to top of page