posted by 준치 2008. 9. 25. 10:22

이것은...ajax get방식으로 TotalSeach()함수를 처음에 호출을하면 SearchTxt에 있는 값을 받아오고
getXMLHttpRequest() 함수를 사용하여 XMLHttpRequest 객체를 구한다.
지역변수 httpRequest 에 넣고 MoveTotalSearch 처리 이후에 호출할 함수 선언하고 처리로직 만든다.
open(),send() 으로 실행이후에 MoveTotalSearch 함수 처리

var httpRequest = null;

function TotalSeach()
{
//debugger;
    var nowAddress = decodeURI(location.href);
    var str = document.all["SearchTxt"].value;   
   
    if(str == null || str == "")
    {
        str = "null";
    }        
    httpRequest = getXMLHttpRequest();
    httpRequest.onreadystatechange = MoveTotalSearch;
    httpRequest.open("GET",nowAddress + "?keyword=" + encodeURI(str),true);
    httpRequest.send(null);   
}

//XMLHttpRequest 객체를 구한다
function getXMLHttpRequest()
{
    if(window.ActiveXObject){
        try{
            return new ActiveXObject("Msxml2.XMLHTTP");
        }catch(e){
            try{
                return new ActiveXObject("Microsoft.XMLHTTP");
            }catch(e1){
                return null;
            }
        }
    }else if(window.XMLHttpRequest){
        return new XMLHttpRequest();
    }else{
        return null;
    }
}

function MoveTotalSearch()
{
    var str = document.all["SearchTxt"].value;   
    if(str == null || str == "")
    {
        str = "null";
    }
    if(httpRequest.readyState == 4){
        if(httpRequest.status == 200){
            location.href = "이동할 URL을 넣었다";
        }else{
            alert("저장실패" + httpRequest.status);
        }
    }
}

posted by 준치 2008. 9. 25. 10:11

get방식은 써봤는데 post 방식이 안되서 과장님이 찾아주신 post 방식
보니까 소스상에서 다른점은 setRequestHeader()이게 다르더군...소스는 자바지만 함 써봅시다...ㅎㅎㅎ

// 포스트 방식
function callPostAjax() {
 var userId = document.getElementById("userId");
 var  v = userId.value;  // userID 값을 가지고 왔다.
 var url = "helloAjax.do";
 // 여러개의 파라미터 값을 넘기려면 and ~ and ~ 이런식으로 뒤에 붙여 보낸다.
 var param = "id=" + v;
 // Ajax 는 전송시 form 방식 으로 하지 않고 request에 담아서 보낸다.
 request.open("POST", url, true);
 request.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=UTF-8');
 request.setRequestHeader("Cache-Control","no-cache, must-revalidate");
 request.setRequestHeader("Pragma","no-cache");
 request.onreadystatechange = callback;
 request.send(param);                       

먼저 <input type="text" name="id" id="userId" onkeyup="callPostAjax();" />
바디부에서 onkeyup="callPostAjax();" 호출
GET 방식과 비교를 하여보면 get 방식에서는 url 에서 모든걸 가져갔지만
여기 POST 방식에서는 param 변수를 둬서 파라미터 값으로 가지고 가는 점이틀리다. 

그리고 EncodingFilter 에서 한글을 설정한다.
그 다음 HelloAjaxAction에서 설정

package hello;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class HelloAjaxAction extends Action {
 @Override
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  String id = request.getParameter("id");  
  System.out.println(id);// 콘솔창 한글 찍히나 확인용  
  String msg = "Not Okay";
  if (id.equals("test")) {
   msg = "Okay";
  }

  return new ActionForward("/hello.jsp", false);

/* config.xml 에서 설정할 것을 여기서 할 수 있는데 다음은
    Ajax 가 이런 설정을 통하여 jsp 페이지를 통째로 가져다
    쓸 수 있다는 사실을 보여준다.
*/
 }
}

posted by 준치 2008. 9. 22. 15:00
검색 추가 버튼 클릭시 그냥 돌려서 보여주고 안보여주고...그냥..뭐...

//추가 함수
function addSearchArea()
{
 var disType; 
 for(var i = 1; i < 5; i++)
 {  
  disType = document.getElementById('SearchArea_' + i).style.display
  if(disType == "none")
  {
   document.getElementById('SearchArea_' + i).style.display = "block";
   break;
  }
 }
}

//줄이기 버튼
function SearchArea()
{
 var controlID = "ctl00_PlaceHolderMain_EzNetWebpart_";
 var disType;
 var disTxtType;
 for(var i = 4; i > 0; i--)
 {  
  disType = document.getElementById('SearchArea_' + i).style.display;
  
  if(disType == "block")
  {
   document.getElementById(controlID + 'SearchText_' + i).value = "";
   document.getElementById('SearchArea_' + i).style.display = "none";   
   break;
  }
 }
}
posted by 준치 2008. 9. 20. 16:55

현재 까지 써본것은 escape 와 unescape 함수인데 다른 값으로 변경되는 경우가 있어서
다른것은 테스트 해보려한다..ㅎㅎㅎ

* encodeURI() : decodeURI()
* encodeURIComponent() : decodeURIComponent()
* escape() : unescape()

테스트 결과 sharepoint SearchServer에서는 encodeURI 이 함수를 쓴다
밑에 소스 str에 원하는 한글을 넣으면 된다..ㅎㅎㅎ

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
 </HEAD>
 <script language="javascript">
 function change(str)
 {
document.write("-----encodeURI </br>");
document.write(encodeURI(str));
document.write("</br>");
document.write("-----decodeURI </br>");
document.write(decodeURI(str));
document.write("</br>");
document.write("----encodeURIComponent </br>");
document.write(encodeURIComponent(str));
document.write("</br>");
document.write("----decodeURIComponent </br>");
document.write(decodeURIComponent(str));
document.write("</br>");
document.write("----escape </br>");
document.write(escape(str));
document.write("</br>");
document.write("----unescape </br>");
document.write(unescape(str));

}
 </script>
 <BODY>
  <input type="button" value="button" onclick="change('인사')">
 </BODY>
</HTML>

posted by 준치 2008. 9. 18. 21:56

간단한거 가지고 삽질을 했는데 body에서 load시에 스크립트를 호출하려 했으나 안됐다
그래서 밑에 소스를 넣으니까 실행이 됐다. 

여기서 startscroll 이게 함수명이다.

<script type="text/javascript">
window.attchEvent("onload",startscroll);
</script>

posted by 준치 2008. 9. 17. 13:14

아래 소스는 span태그 앞에 css를 이용하여 원하는 이미지를 앞에 위치하고
창크기를 조절할시에 밑으로 줄바꿈이 되는데
그것은 white-space:nowrap을 이용하여 한 문장을 선택했을때 줄바꿈이 되게 만든다..

문제가 있었는데 중간에 선택해야 밑에 떨어졌을때 이미지가 보였다.
그래서 span태그에 사이즈를 지정해서 문제가 해결됐다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
  <STYLE TYPE="text/css">
 #boolet_tbl span {
 background: url(bl_div.gif) no-repeat 0 0.25em;padding-left: 13px;white-space:nowrap;
 }
</STYLE>
 </HEAD> <BODY>
  <table style="width:100%;" border="1px" id="boolet_tbl">
 <tr><td>
  <span style="width:10%;">인사과(10)</span>
  <span style="width:10%;">인사과(10)</span>
  <span style="width:10%;">인사과(10)</span>
  <span style="width:10%;">인사과(10)</span>
  <span style="width:10%;">인사과(10)</span>
 </td></tr>
  </table>
 </BODY>
</HTML>

posted by 준치 2008. 9. 12. 20:01

쉐어포인트 검색서버를 사용하다가 KeywordQuery로 값을 받아오는 단계에서
에러가 났다. 한마디로 어떤 클래스를 참조하는지 명시하라는 말이였다...삽질...

Scopes are usually used in search code. One of the very common errors when working with scopes in search code is as following:

"Calling GetScopeID from a non-Office server binary."

This error occurs when you instantiate the query object, for example:

KeywordQuery kwQuery = new KeywordQuery(site);

To resolve this issue, include the correct namespace when defining the kwQuery object, for example:

Microsoft.Office.Server.Search.Query.KeywordQuery kwQuery = new Microsoft.Office.Server.Search.Query.KeywordQuery(site)

When you skip the namespace, SharePoint tries to call the GetScopeID() from an assembly different than the one it should be using. This especially happens when both of the following namespaces are included in your code:

using Microsoft.SharePoint.Search.Query;
using Microsoft.Office.Server;


posted by 준치 2008. 9. 12. 14:37

JS 로 xml 파일 읽어오는 걸 만들다 보니.. 이것저것 손대게 되네 ^^

아래는 우편번호를 찾는 것인데..

그냥 찾는게 아니라.. 특정 주소를 입력하면 onkeyup 이벤트를 통해

ActiveXObject("Msxml2.XMLHTTP") 를 생성하고.. 그곳에서 XML 값을 리턴받아서

Table 에 add 시키는 것이다..

물론 Refresh 는 없다.


이상한거는 테이블이 길어지면 보기 안좋아서.. DIV 로 스크롤 바를 줬는데

테이블 바로 위에 공백이 생긴다 -.-;


우편번호는 postman.pe.kr 에서 받았고,

커넥션 풀은 proxool 로 했다.



화면에 디스플레이 되는 JSP 파일

FileName : Register.jsp


<%@ page language="java"
 pageEncoding="euc-kr"
 import="java.sql.*"
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
 <title>My JSF 'Register.jsp' starting page</title>

 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
 
<script language="javascript">

 function openDIV(divName){
 
  var obj = document.getElementById(divName);
  var x = event.clientX + parseInt(obj.offsetWidth);
  var y = event.clientY + parseInt(obj.offsetHeight);

  var _x = document.body.clientWidth - x;
  var _y = document.body.clientHeight - y;

  if(_x < 0){
   x = event.clientX + document.body.scrollLeft + x;
  }else{
   x = event.clientX + document.body.scrollLeft;
  }

  if(_y  < 0){
   y = event.clientY + document.body.scrollTop + _y + 20;
  }else{
   y = event.clientY + document.body.scrollTop;
  }

  obj.style.top = y + 30 ;
  obj.style.left = x ;
  obj.style.display = "";
 
  document.forms[0].query.focus();
 }


 function closeDIV(divName){
  var obj = document.getElementById(divName);

  if(obj.style.display != "none"){
   obj.style.display = "none";
  }
 }
 
 var req;
 
 function zipcode_check(frm){
  var inputVal = frm.query.value;

  if(inputVal.length < 2){
   return;
  }
   
  req = new ActiveXObject("Msxml2.XMLHTTP");
  if(req){
   req.onreadystatechange = processStateChange;  
   req.open("GET", "SearchAddr.jsp?dong=" + inputVal, false);
   req.send();
  } 
 }
 
 function processStateChange(){
  if(req.readyState == 4){
   if(req.status == 200){
    var nodes = req.ResponseXML.selectNodes("//addr");
    FillNodes(nodes);    
   }else{
    alert("Ooops : " + req.statusText);
   }
  } 
 }
 
 // XML 을 읽어들여서 테이블에 채운다.
 function FillNodes(nodes){
  var tableObj = document.getElementById("addrTbl");
  var tableBody = tableObj.childNodes[0];
  var tableRow, tableCell;
 
  if(tableObj.rows.length > 0){
   for(var i = 0; i < tableObj.rows.length; i++){
    tableObj.deleteRow(i);
   }
  }

  for(var i = 0; i < nodes.length; i++){

   var st = nodes[i].selectSingleNode("zipcode").text + " "
      + nodes[i].selectSingleNode("sido").text + " "
      + nodes[i].selectSingleNode("gugun").text + " "
      + nodes[i].selectSingleNode("dong").text + " "
      + nodes[i].selectSingleNode("ri").text + " "
      + nodes[i].selectSingleNode("bunzi").text;
     
   tableRow = document.createElement("TR");
   tableBody.appendChild(tableRow);
   tableCell = document.createElement("TD");
   tableRow.appendChild(tableCell);
   tableRow.runtimeStyle.cursor = "hand";  
   tableCell.innerHTML = st;
  }

  document.getElementById("addrTbl").ondblclick = SelectTR;
 
 }
 
 function SelectTR(element){
  var row ;
 
  if(element == null){
   element = window.event.srcElement;
  }
 
  row = findRow(element);
 
  AddrSelect(element.innerHTML);
 
 
 }
 
 function findRow(element){
  if(element.tagName == "TR"){
   return element;
  }else{
   return null;
  }
 }
 
 function AddrSelect(addr){
  document.forms[0].addr.value = addr;
  closeDIV('FindZipCodePanel');
 }

</script>
</head>
 
 <form name="registerForm" >
<table border="1" align="center" width="500" >
 <tr>
  <td>우편번호 :
   <input type="text" id="zip1" name="zip1" readonly size="3" /> -
   <input type="text" id="zip2" name="zip2" readonly size="3" />
   <input type="button" id="FindZipCodeBtn" name="FineZipCodeBtn" value="우편번호 찾기" onclick="openDIV('FindZipCodePanel')" />
  </td>
 </tr>
 <tr>
  <td>주 소 : <input type="text" id="addr" name="addr" readonly size="40" /></td>
 </tr>
 <tr>
  <td>상세 주소 : <input type="text" id="addrDetail" name="addrDetail" size="40" /></td>
 </tr>
</table>

<DIV id="FindZipCodePanel" style="POSITION: absolute; Display:none; BACKGROUND-COLOR: white; WIDTH:500PX; BORDER-RIGHT: gray 1px solid; BORDER-TOP: gray 1px solid;BORDER-LEFT: gray 1px solid; BORDER-BOTTOM: gray 1px solid; ">

<TABLE width="100%" align="center" border="1" cellpadding="0" cellspacing="0">
 <TR>
  <TD align="right" bgColor="#D7DED6" height="13"><a href="javascript:closeDIV('FindZipCodePanel');">X</a></TD>
 </TR>
 <TR>
  <TD>주소를 입력하세요</TD>
 </TR>
 <TR>
  <TD><input type="text" name="query"  onkeyup='zipcode_check(this.form)' ondblclick=""/></TD>
 </TR>
 <TR>
  <TD><div id="addrTableDIV" style="OVERFLOW-Y:scroll;WIDTH:100%;POSITION:relative;HEIGHT:200px;BORDER-TOP: gray 1px solid;">
   <table id="addrTbl" border="1" align="center" width="100%" ></table></div></TD>
 </TR>  
</TABLE>  

</DIV>


<body>


</body>
</html>


Query String 을 통해 xml 형식으로 주소를 넘겨주는 JSP 파일

FileName : SearchAddr.jsp



<?xml version="1.0" encoding="ksc5601"?>
<Address>
<%@ page language="java"
 contentType="text/xml; charset=euc-kr"
 import="java.sql.*"
%><%

 request.setCharacterEncoding("euc-kr");
 
 String dong = request.getParameter("dong");
 
 if(dong == null){
  return;
 }
 
 Connection conn = null;
 Statement stmt = null;
 ResultSet rs = null;
 
 try{
 
  conn =  DriverManager.getConnection("proxool.AjaxSample");
  stmt = conn.createStatement();
 
  String query = "select * from zipcode where dong like binary '%" + dong + "%'";
 
  rs = stmt.executeQuery(query);
 
  while(rs.next()){
%>
<addr>
<zipcode><%= rs.getString("zipcode") %></zipcode>
<sido><%= rs.getString("sido") %></sido>
<gugun><%= rs.getString("gugun") %></gugun>
<dong><%= rs.getString("dong") %></dong>
<ri><%= rs.getString("ri") %></ri>
<bunzi><%= rs.getString("bunzi") %></bunzi>
<seq><%= rs.getString("seq") %></seq>
</addr>
<%    
  }
 
 rs.close();
 }catch(Exception e){
  e.printStackTrace();
 }finally{
  if(stmt != null) stmt.close();
  if(conn != null) conn.close();
 }
%></Address>

posted by 준치 2008. 9. 12. 03:16
unreachable code detected - for문 돌리려고 쓰다가 이런게 warnings에 이게 뜨더라구여
신경쓰여서 찾아보니 조건절에 문제가 있었습니다.

검색해서 찾아보니 죽어도 실행되지 않는 부분이 있다고 하더라구여..ㅎㅎ

warnings라도 해결하고 가야져..ㅎㅎ
posted by 알 수 없는 사용자 2008. 9. 12. 02:08

{ItemId} - Integer ID that represents the item within a list.

{ItemUrl} - URL of the item being acted upon. Only work for documents in libraries. [Not functional in Beta 2]

{ListId} - GUID that represents the list.

{SiteUrl} - URL of the Web site (SPWeb).

{RecurrenceId} - Recurrence index. This token is not supported for use in the context menus of list items.


<UrlAction Url="javascript:Window.open('http://'+ window.document.location.host +'/BookMarkAdd.aspx?SiteUrl={SiteUrl}&amp;ItemId={ItemId}&amp;ListId={ListId},'','430','543','no');"/>

이런 식으로 사용 하시면 되겠습니다.