水曜日, 1月 10, 2007

S2Flex

S2Flex-ийг хэрэглэхэд S2Container-д бүртгэгдсэн байгаа компонентуудын method-ийг Flex-ээс амархнаар дуудаж болдог.

Шаардлагатай зүйлс:
JDK1.4-өөс дээш, S2FlexVx.x.x.zip-ийг татаж аваад задлаад eclipse-тээ импорт хийж оруулж өгнө.
[File->Import->General->Existing Projects into Workspace] flashgateway.jar энэ файл байхгүй учраас ажиллуулахад алдаа гарна. Учир нь Flex-ийн jar файлыг хамаагүй тараадаггүй ба Flex нь үнэтэй програм юм. Гэхдээ 30 хоногийн Trial Flex-үүд байдаг. Компайл хийхийн тулд "S2flex/lib" директорт "flashgateway.jar" файлыг хуулж өгнө.
Эндээс Trial хувилбарыг татаж авч болно. Жишээнд, Tomcat, Tomcat Plugin
болон Flex нь JRun Integration mode гэлтгүй, Macromedia Flex mode-өөр суулгагдана. $FLEX_HOME нь Flex-ийг суулгасан газрын зам. Жишээ кодыг татаж аваад задалсны дараагаар Flex-ийн орчинг бэлдэнэ. "$FLEX_HOME/flex.war" энэ файлыг тохиромжтой газар нь задлана(jar xf flex.war). Задалсны дараагаар "s2flex-example/WEB-INF" директорт хуулна. S2Container-ийг ажиллуулахын тулд "Web.xml" файлд дараах өөрчлөлтийг хийнэ.

Flex-ийн AMFGateway нь S2Container-дах Компонентийн method-ийг дуудахын тулд s2flex-example/WEB-INF/flex/gateway-config.xml-д Seasar2-т зориулж тааруулж өгнө.




Application-д log4j-ээр логийг гаргахын тулд
WEB-INF/flex/jars-д байгаа commons-loging.jar-ийг WEB-INF/lib-д зөөнө.
JavaBeans болон ActionScript-ийн классыг тодорхойлох
JavaBeans болон ActionScript-ийн классыг тодорхойлсноор Java болон Flex-ийн хооронд өгөгдөл солилцож чадна. Жишээнд дараах байдлаар тодорхойлсон байна.

package examples.flex;

import java.io.Serializable;

public class AddDto implements Serializable {

private int arg1;
private int arg2;
private int result;

public int getArg1() {
return arg1;
}

public void setArg1(int arg1) {
this.arg1 = arg1;
}

public int getArg2() {
return arg2;
}

public void setArg2(int arg2) {
this.arg2 = arg2;
}

public int getResult() {
return result;
}

public void setResult(int result) {
this.result = result;
}

}
Мөн үүнд харгалзах ActionScript-ийг үүсгэнэ.
class examples.flex.AddDto {
var _remoteClass:String;
var arg1:Number;
var arg2:Number;
var result:Number;

function AddDto() {
_remoteClass = "examples.flex.AddDto";
}
}


Гол цэг нь дараах зүйлс юм.
  • ActionScript-ийн классын нэр Java классын нэртэй таарч байх
  • _remoteClass гэсэн шинж чанарыг тодорхойлох
  • Байгуулагч дээр _remoteClass-д классын нэрийг зааж өгөх
  • Шинж var-аар хувьсагчуудыг зарлах
  • MXML файлыг root болгож package бүрээр директорт хуваана. Жишээ нь: examples.flex.AddDto гэдэг класс нь examples/flex/AddDto.as гэж тавигдах болно. Мөн WEB-INF/flex/user_classes-г root директор болгож package бүрээр директорт салгаж болно. Ерөнхийдөө user_classes гэ сэн аргаар хэрэглэх нь дээр.
Үүний дараагаар, Flex талд "var"-ээр классын нэрийг тогтоод хувьсагчуудыг зарлах уу?, эсвэл дараах байдлаар классын нэрийг таг нэрээр зарлана. xmlns аттрибутаар package-ийн нэрийг тодорхойлно.



Мессэжийг олон хэл дээр дэмжих
Java дээр property файлыг ашиглаж олон хэл дээр мессэжийг гаргаж чаддаг ба тэр property файлыг Flex-ээс ашиглах функц S2Flex-д бэлтгэгдсэн болно. Жишээ нь дараах маягийн property файлыг WEB-INF/classes-д бэлтд
сэн гэвэл:

FLXMessages_ja.properties

EFLX0001=({0})は入力必須です
EFLX0002=バリデーションエラーです。エラーを修正してもう一度入力してください。

FLXMessages.properties

EFLX0001=({0}) is mandatory
EFLX0002=Please enter valid data in the fields with errors and try again.
Eclipse дээрээ Япон хэлээр property удирд ахыг хүсвэл эндээс property editor-ийг татаж аваад ашиглавал тохиромжтой. Дараа нь энэ property файлаа Flex талаас хэрэглэхийн тулд компонентийг dicon файлд бүртгэнэ.


Мөн уг компонентийг Flex-ээс хэрэглэхийн
тулд WEB-INF/flex/flex-config.xml-д бүртгэх шаардлагатай.







Java талаас бэлтгэл дууслаа. Дараа нь Flex талын бэлтгэлийг хийнэ. Эхлээд "
s2flex/as2/org" директорыг "WEB-INF/flex/user_classes"-нд бүгдийг нь хуулна. Дараа нь messageLogic-ийг дуудахын тулд RemoteObject таг-ийг тодорхойлно. Сервэр талаас буцах утга нь буцаж ирсэн үеийн процесс болгож "processMessageManager()"-ийг дуудна. "event.result"-д "MessageManager" орж ирнэ.
messageLogic нь програм ажиллах үед дуудагдана.






import org.seasar.flex.message.*;
function initApp() {
messageLogic.getMessageManager("FLXMessages", "ja");
}

processMessageManager()-д цуглуулсан MessageManager объектыг MessageManager
классын static хувьсагчид(instance)-д хадгалж байна.

import org.seasar.flex.message.*;

class org.seasar.flex.message.MessageManager {
static var instance:MessageManager;
...
}

function processMessageManager(messageManager:MessageManager) {
MessageManager.instance = messageManager;
}

Үүнээс гадна, Validator-ийг үүсгэнэ. Validator нь, mx.validators.Validator-ээс удамшиж,
doValidation(value)-ийг гүйцэтгэнэ. Value-д орж ирсэн утга байна. Алдаа тохиолдсон үед,
Validator#validationError()-аар алдааны мэдээллийг гаргана. MessageManager объект нь
MessageManager.instance-аар зааварчлагдана. Дараа нь,
getMessage(messageCode, аргументын олонлог)-ийг зөвхөн дуудна.

import org.seasar.flex.message.*;
class RequiredFieldValidator extends mx.validators.Validator {
var fieldName:String;


function doValidation(value) : Void {
if (value == undefined || value == "") {
var args:Array = new Array();
args[0] = fieldName;
validationError("required", MessageManager.instance.getMessage("EFLX0001", args));
}
}
}

Энэ жишээнд, s2flex-example/validation-нд хадгалагдаж байна. Browser-аас
http://localhost:8080/s2flex-example/validation/ValidationApp.mxml-руу хандаад үзээрэй. Юу ч
оруулаагүй үед "validator" товчийг дарахад алдааны мессэж харагдана. Дараах байдлаар
алдааны мэдээлэл харагдах болно.



















Жишээ:

Java тал дээрээ interface болон хэрэгжүүлэгчийг бэлдэнэ.

examples.flex.AddLogic

package examples.flex;

public interface AddLogic {

public int calculate(int arg1, int arg2);

public AddDto calculate2(AddDto addDto);
}

examples.flex.AddLogicImpl

package examples.flex;

public class AddLogicImpl implements AddLogic {

public int calculate(int arg1, int arg2) {
return arg1 + arg2;
}

public AddDto calculate2(AddDto addDto) {
return addDto.setResult(addDto.getArg1() + addDto.getArg2());
}
}


Компонентийг dicon файлд бүртгэнэ.












Бүртгэгдсэн компонентийг Flex-ээс дуудахаар "s2flex-example/WEB-INF/flex/flex-config.xml"-
ийн "flex-config/remote-objects/whitelist"-д дараах тэмдэглэлийг нэмнэ.









Object таг-аар компонентуудыг тодорхойлно. Source таг-аар тодорхойлох нь S2Container-р
тодорхойлсон компонентийн нэр юм. name аттрибут нь source аттрибуттай адилхан байх нь
ойлгоход хялбар боловуу. Компонентийг нэмэх тохиолдолд, object таг-г нэмнэ. Flex1.0-ийг
хэрэглэх үед, дээрх агуулгыг бичсэн файл нь
"s2flex-example/WEB-INF/flex/flex-config-s2flex.xml"-д аль хэдийн бэлтгэгдсэн учраас
"flex-config.xml"-д хуулна. Flex1.5-ийг хэрэглэх үед, адилхнаар "flex-config-s2flex15.xml"-ийг
хуулна.

Хамгийн сүүлд нь Flex програмын код. Add.mxml,Add2.xml файлыг төслийн эх директорт
хийнэ.














"RemoteObject" таг-аар Java-ийн компонентийг тодорхойлно. named аттрибутад
flex-config.xml-ийн object таг-ийн name аттрибутаар тодорхойлсон утгыг заана. id аттрибут нь,
named аттрибуттай адил байх нь ойлгоход хялбар. Дараа нь, ActionScript-ийн дотроос
компонентийн нэр, method-ийн нэрээр дуудаж чадна. {addLogic.calculate.result} байдлаар хийж
calculate method-ийн дуудан үр дүнг Label-ийн value-д автоматаар өгдөг байдлаар тохируулж
болно.

Ингээд дууслаа.
Tomcat-ийг restart хийж, Browser-с "http://localhost:8080/s2flex-example/Add.mxml"-руу хандана.

Доор JavaBeans-ийг хэрэглэсэн жишээг харуулав.
















Browser-аас "http://localhost:8080/s2flex-example/Add2.mxml"-руу хандана уу.

Жишээнүүдийг эндээс татна уу.


0 件のコメント: