처음부터 대소문자를 구분하지 않고 검색할 수 있는 검색기능을 만들기 위해 오라클의 UPPER기능을 통해 검색어의 대소문자

구분을 제거 하여 검색하도록 하였다.

오픈전 작업 시 테스트 했을 때는 문제 없이 필터링 되어 넘어갔는데 오픈 후에 다시 검색기능을 테스트 해 보니 대문자로 검색 시

대문자만 검색되고 소문자로 검색 시 소문자만 검색되는 문제가 발생 하였다.

그래서 원인 분석에 들어갔고 혹시나 다음과 같이 작성했던 쿼리문이 문제가 되었나 싶어

 

=>  UPPER(A.SUBJECT) LIKE UPPER('%'||#search_key#||'%')

 

다음과 같이 수정하였다. 

 

=>  UPPER(A.SUBJECT) LIKE '%'||UPPER(#search_key#)||'%'

 

그 결과 이상없이 대소문자를 필터링 하여 검색이 되었다. 하지만 여기서 예상치 못했던 또 다른 문제가 발생하였다.

검색 결과 화면에 보여질 때 필터링 단어의 스타일을 바꿔주는 부분에서 대문자로 검색 시 대문자로 검색된 문자만 변경되고

소문자로 검색 시 소문자로 검색된 문자만 변경되는 현상이다.

 

대문자로 검색하든 소문자로 검색하든 스타일이 적용 되어야 한다는게 맞기 때문에 원인 분석 후 DB에서 조회해온 제목과 내용을

replaceAll를 통해 스타일을 적용해 주는 부분에서 대소문자를 구분하여 스타일을 적용해 준다고 판단하여 대소문자 구분없이

치환해 주는 방법을 구글링 해 보았다.

 

치환할 문자 앞부분에 (?i)를 붙여 주면 대소문자 구분없이 치환해 준다는 것이다.

 

적용 방법은 다음과 같다.

=>  replaceAll("(?i)"+board_search_code, "<b>"+board_search_code+"</b>") 

Oracle JDBC 드라이버는 메이븐 센트럴 레파지토리에 없다. 그래서 따로 레파지토리를 추가해 줘야 하는데

검색을 해보니 예전에는 오라클에서 제공하는 메이븐 레파지토리(http://download.oracle.com/maven)가 있었는데 

요즘 오라클 사이트가 전체적으로 삐꾸가 되서 이제 잘 되지 않는것 같다.



다음은 JDBC 드라이버가 오라클 사이트에 올라오는 최신 버전은 아니지만 그래도 거의 준 최신 버전을 받을수 있는 레파지토리이다.

http://maven.jahia.org/maven2

pom.xml 파일 repositories 에 요걸 추가하고

1
2
3
4
5
<repository>
<id>oracle</id>
<name>ORACLE JDBC Repository</name>
</repository>



dependencies 에 요걸 추가해 주면 된다.

1
2
3
4
5
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.1.0.7.0</version>
</dependency>

ojdbc5 가 필요한 사람은 ojdbc6 대신에 ojdbc5 로 바꿔서 적어주면 됨.



참고 : ojdbc6은 Oracle 11g부터 사용가능하다

* 예시 *

<select id="selectbox" name="selectbox">

     <option value="01" selected>첫번째</option>
     <option value="02" >두번째</option>
<option value="03" >세번째</option>
</select>

1. 원하는 데이터에 해당하는 option 선택 하기
$("#selectbox > option[value=02]").attr("selected", "ture");
2. 선택된 select태그의 option 값 가져오기
$("#selectbox option:selected").val();

추가 : $('input[name=radUserId]:checked').val()


<dependency>

      <groupId>servlets.com</groupId>

      <artifactId>cos</artifactId>

      <version>05Nov2002</version>

</dependency>

<dependency>  

      <groupId>commons-fileupload</groupId>         

      <artifactId>commons-fileupload</artifactId>         

      <version>1.2.1</version> 

</dependency>

 

<dependency>      

      <groupId>org.apache.commons</groupId> 

      <artifactId>commons-io</artifactId> 

      <version>1.3.2</version>

</dependency> 

이전에 파일업로드 할때 다음과 같이 업로드 경로를 사용하였다.

ServletContext context = getServletContext();

String uploadPath = context.getRealPath("upload"); 

 

근데 전자정부 표준 프레임워크를 사용하다가 상단의 코드 대신 세션을 사용하여 다음과 같이 사용하였다.

String uploadPath = request.getSession().getServletContext().getRealPath("upload"); 

function fn_onlyNumber(loc) {
   if(/[^0123456789]/g.test(loc.value)) {
      alert("숫자만 입력해 주세요!");
      loc.value = "";
      loc.focus();
   }
}

<SCRIPT LANGUAGE="JavaScript"> 
<!-- 
function winPrint() { 
window.print(); 

//--> 
</SCRIPT> 

<script language="javascript">
<!--
bads = new Array
("알몸","임마","바보","미친놈","성인정보","섹스","나쁜놈","불륜","자살","낙태","똥개")
function Check() {
 //아래에서 필터할 폼의 이름과 필드이름을 설정
 badCheck=document.myform1.field1.value.toLowerCase()
 awdrgy = 0
 aLeRt = 0
 while (awdrgy<=bads.length-1 && aLeRt!=1) {
  if (badCheck==bads[awdrgy]) {
   aLeRt = 1
   alert("입력하면 안되는 금지어를 입력하셨습니다.!")
   document.myform1.field1.value=""
  }
  awdrgy++
 }
}
-->
</script>
<!--금지어를 입력못하게 하는 스크립트 끝-->
<!--폼 환경 설정-->
<form name="myform1">
<input name="field1" onblur="Check();">
<input type="button"  value="Submit" >
</form>
<!--폼 환경 설정 끝-->

시퀀스

표현하는 문자
 \0

널 문자

 \b

백스페이스

 \t수평 탭
 \n줄바꿈 문자
 \v수직 탭
 \f

폼 피드

 \r

캐리지 리턴

 \"큰따옴표
 \'작은따옴표
 \\역슬래시
 \xXX

두 개의 16진수 숫자 XX에 의해 지정되는 Latin-1 문자.

 \uXXXX

네 개의 16진수 숫자 XXXX에 의해 지정되는 Unicode 문자.

 \XXX

1과 377 사이의 8진수 숫자 XXX에 의해 지정되는 Latin-1 문자.

ECMAScript v3에서는 지원하지 않으므로 이 이스케이프 시퀀스는 

사용하지 말 것.


+ Recent posts