이번에 swfupload 를 쓰기는 좀 버겁고, 그렇다고 기본제공하는 파일업로드는 너무 단순해서 재미없고, 해서 봤더니 ext-ux 의 fileupload 모듈이 있어서, 그걸 좀 썻습니다. 다 좋은데, 최종 처리결과를 받는중 계속해서 xml 태그가 잘못됬다고 파징 오류가 납니다. 아래결과를 파징하는동안 말이죠.


하지만, 아무리 봐도 응답값은 별 문제도 없었는데, 왜 그런가 했는데, 엉뚱한 ext core 의 오류였습니다. 이것도 IE계열에서만 발생합니다. 아래처럼 코딩되어 있더군요. 따옴표까 짱구입니다. 왜 그랬을까요. 흠.. 더불어, 리턴되는 json 결과물이 없으면 역시 스크립트 오류가 발생됩니다.
doDecode = function(json){
return "("+json+')');
},
걍 간단하게 아래처럼 코딩해서 엎어쳤습니다. Ext.Ajax 쪽이라, 오버라이드 하기도 삐리리 하더군요.
doDecode = function(json){
return json==="" ? "" : eval("("+json+")")
},
더불어! 응답측에서 일반송신을 하면 html 로 인식해 <pre> 태그가 붙어서 갑니다. 응답할때 헤더에 "text/plain"을 명시해 주어야 합니다.
더불어! 파일업로드시 Ajax 방식이 아닌, 그냥 일반 POST 로 처리하려면 폼패널에 simpleupload 를 'true" 로 주시면 됩니다. 그러면 페이지를 대상으로 일반 송신으로 처리됩니다. (이것도 때로는 유용할듯.)
더불어! api 에 설명이 잘 나와있습니다. 무조건 api 는 잘 읽어봐야 하는데...쩝.
ext 이전 버젼에선, 메뉴 컨텍스트가 하단을 클릭해도 자동으로 사이즈가 맞춰졌었는데, ext3 부터는 사이즈가 강제로 조정되고, 대신 아래그림 처럼, 스크롤 방향키가 나옵니다. 이걸 좋아졌다고 해야하나.. 어쨋거나 저를 포함한 많은 사용자들은 오히려 불편해 합니다. 보기엔 좋을지 몰라도 말이죠..

덕분에, 또 오버라이드가 필요하게 되었습니다. 아래처럼 Menu 를 오버라이드 하게되면, 스크롤바 대신에, 사이즈를 재조정하여 맞추게 됩니다. enableScrolling 속성은 false 로 주시구요.
Ext.override(Ext.menu.Menu, {
show: function(el, pos, parentMenu) {
if (this.floating) {
this.parentMenu = parentMenu;
if (!this.el) {
this.render();
this.doLayout(false, true);
}
//if(this.fireEvent('beforeshow', this) !== false){
this.showAt(this.el.getAlignToXY(el, pos || this.defaultAlign, this.defaultOffsets), parentMenu, false);
//}
} else {
Ext.menu.Menu.superclass.show.call(this);
}
},
showAt: function(xy, parentMenu, _e) {
if (this.fireEvent('beforeshow', this) !== false) {
this.parentMenu = parentMenu;
if (!this.el) {
this.render();
}
if (_e !== false) {
xy = this.el.adjustForConstraints(xy);
}
this.el.setXY(xy);
if (this.enableScrolling) {
this.constrainScroll(xy[1]);
}
this.el.show();
Ext.menu.Menu.superclass.onShow.call(this);
if (Ext.isIE) {
this.layout.doAutoSize();
if (!Ext.isIE8) {
this.el.repaint();
}
}
this.hidden = false;
this.focus();
this.fireEvent("show", this);
}
}
});
ie 계열에선 selector-dumy 를 사용하면 되고,

ff 등 타계열에선 outline 을 없애주면 되겠다.
하지만 이것은 웹표준과 거리가 멀다. 왜? w3c 를 통과하지 못하기 때문에?
흠.. 웹표준은 왜 존재하는가? 무엇때문에 준수하는것인가? 그것은 어찌되었던 여러사용자를 위한 측면이지 프로그래머 입장에서의 측면은 아니지 않을까? IE6 헥이 웹표준이 아니라서 사용하지 않는다고, 사용자들이 편해지는가? 그렇다고 모든 사용자들은 무매하기 때문에, IE6 사용자는 배재하는가?
어쨋든 IE가 문제야.. 궁시렁..궁시렁...
왜 전 자꾸 JavaScript 와 JSON이 생각이 날까요? 어서 많이 보던건데.. 흘..
1. Improved Type Inference for Generic Instance Creation
- 단순해진 Generics
- 단순해진 Generics
이전 : Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
JDK7 : Map<String, List<String>> anagrams = new HashMap<>();
- 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-February/000009.html2.
Language support for collections
- Java 코드의 사이즈를 줄여주고, 가독성을 높여줌이전 : final List<Integer> piDigits = Collections.unmodifiableList(Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9 ));
JDK7 : final List<Integer> piDigits = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9];
- 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/001193.html3.
Automatic Resource Management
- exception handling을 줄여줌- C++’s RAII과 C#’s using에 대응하기 위함
이전 : static String readFirstLineFromFile(String path) throws IOException { BufferedReader br = new BufferedReader(new FileReader(path)); try { return br.readLine(); } finally { br.close(); } }
JDK7 : static String readFirstLineFromFile2(String path) throws IOException { try (BufferedReader br = new BufferedReader(new FileReader(path)) { return br.readLine(); } }- 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-February/000011.html
4.
Added binary integer literals
- Integer Literal에 Binary Integer
Literal이 추가됨BinaryIntegerLiteral: BinaryNumeral IntegerTypeSuffix_opt- 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000929.html
BinaryNumeral: 0 b BinaryDigits 0 B BinaryDigits BinaryDigits: BinaryDigit BinaryDigit BinaryDigits BinaryDigit: one of 0 1
5.
String literals in switch statements- 스위치문에 문자열 사용 가능
JDK7 : String s = "first"; switch(s) { case "first": processFirst(s); case "second": case "third": processThird(s); break; case "fourth": processFourth(s); default: processDefault(s); break; }- 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-February/000001.html
6.
Simplified Varargs Method Invocation
- 컴파일 경고에서 메소드 선언 경고로 이동함이전 :- 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000217.html
static <T> List<T> asList(T... elements) { ... } static List<Callable<String>> stringFactories() { Callable<String> a, b, c; ...
*// Warning: **"uses unchecked or unsafe operations"* return asList(a, b, c);
}
JDK7 :
*// Warning: **"enables unsafe generic array creation"*
static <T> List<T> asList(T... elements) { ... }
static List<Callable<String>> stringFactories() {
Callable<String> a, b, c;
...
return asList(a, b, c);
}
7.
Enhanced null handling
- Null-ignore invocation, Null-safe
types이전 :
String str = getStringMayBeNull(); str = (str == null ? "" : str); JDK7 : String str = getStringMayBeNull() ?: "";- 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000217.html
8.
Enum Comparisons
- Enum에서 range(<, > 등) 연산 가능이전 : if(rank1.compareTo(rank2) < 0) ... if(rank1.ordinal() < rank2.ordinal()) ... JDK7 : if(rank1 < rank2) ...
9.
Chained Invocation
- 체인형식으로 메소드 호출 가능이전 :
DrinkBuilder margarita = new DrinkBuilder(); margarita.add("tequila"); margarita.add("orange liqueur"); margarita.add("lime juice"); margarita.withRocks(); margarita.withSalt(); Drink drink = margarita.drink(); JDK7 :
Drink margarita = new DrinkBuilder() .add(“tequila”) .add(“orange liqueur”) .add(“lime juice”) .withRocks() .withSalt() .drink();
10.
Extension Methods
- static import 확장이전 : List list = new ArrayList(); ... Collections.sort(list); list.sort();- 레퍼런스 : http://www.javac.info/ExtensionMethods.html
JDK7 :
import static java.util.Collections.sort; List list = new ArrayList(); ...
list.sort();
11. Improved
Exception Handling- 두개이상의 catch문 가능
- catch문에서 rethrow가능
JDK7 : catch multiple exceptions- 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-February/000003.html
try { return klass.newInstance(); } catch (InstantiationException | IllegalAccessException e) {
throw new AssertionError(e); }
JDK7 : rethrow exceptions
try { doable.doIt(); } catch (final Throwable ex) {
logger.log(ex);
// surrounding method can declare only checked thrown by doIt()
throw ex;
}
12.
Language support for JSR 292
- 다이나믹 타입 지원(java.dyn.Dynamic)JDK7 :
Dynamic x = (any type of expression can go here); Object y = x.foo("ABC").bar(42).baz();- 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/001131.html



