日曜日, 1月 07, 2007

S2JSF

S2JSF(Java Server Faces) нь Web application-ийг бүтээхэд зориулагдсан presentation давхрагын framework юм. JSF-тэй хамгийн ойрхон framework нь нэлээн алдартай Struts байх юм. Хэрвээ JSP-ийг ашиглан хуудасны загварыг өөрчлөхөд application серверийн эхлүүлж deploy хийхгүй бол болохгүй билээ. Энэ нь төвөгтэй байдал үүсгэж байна. Үүний оронд S2JSF-ийг хэрэглэвэл харагдац хэсэг нь HTML учраас дээрх жишээ дурьдсан ажлуудыг хийх шаардлагагүй болж хуудасны загварыг өөрчлөхөд хялбар болох юм. Жишээг харна уу.

hello.html









Эхний мөрөнд xmlns:m=http://www.seasar.org/maya S2JSF-ийн namespace-ийн тодорхойлолт юм. Үүнийг заавал тодорхойлж өгнө.

m:extends="/WEB-INF/layout/layout.html энэ нь layout(хуудасны загвар)-ийг тодорхойлно. Үүнд: header, footer, body, menu зэрэг хуудсуудыг нийлүүлсэн хуудас юм. 7-р мөрөнд байгаа “layoutTitle” нь layout.html хуудсанд хуудасны гарчигийг харуулахад ашиглана. Үндсэн хуудасруу параметр дамжуулахад f:param тагийг ашиглана. 8-10р мөр нь үндсэн хуудсын body хэсэгт харагдах зүйлс. 9-р мөрний #{} гэсэн хэсэгт хувьсагчийг тавьж өгвөл түүний утгыг HTML хуудсанд харуулах болно. Span тагийг ашиглана.

layout.html



















4-р мөрөнд байдаг CSS файлыг дуудсан байна. Inject аттрибутад s:link-ийг олгосноор дуудагдах юм.
5-р мөрөнд түрүүний хуудаснаас дамжуулсан хуудасны гарчигыг харуулах хэсэг байна. S угтвар нь WEB-INF/classes/jsf.dicon(эсвэл WEB-INF/src) гэсэн файлд тодорхойлогдох юм. S угтвар нь http://www.seasar.org.jsf URI-тай холбогдоно.
17-р мөр нь их биеийн хэсгийг харуулна.
jsf.dicon (Энэ жишээний)










Layout.html-ийн 10-р мөрөнд хуудасны толгой хэсгийг оруулж байгаа ба доор толгой файлыг үзүүлсэн байна. Мөн зураг хэрхэн дуудсаныг харна уу.

header.html



menu.html












6-р мөрөнд байгаа линкний action-д hello гэж байна. Үүнийг үсрэх хуудсыг WEB-INF/faces-config.xml файлд тодорхойлж өгнө.

faces-config.xml












add.html











10-р мөр нь алдааг гаргах үйлдэл. 11-р мөрөндэх Input tag нь javabean-ий property-тэй холбогдсон байна. Оролтын утга нь Javabean-ий Property-д олгогдох юм. Доор байгаа examples/jsf/dicon/add.dicon файлд addDto-г тодорхойлж өгнө.

add.dicon


instance аттрибут нь request гэж тодорхойлогдсон нь addDto нь request байдлаар зохион байгуулагдана.app.dicon файлын root элементэд add.dicon файлыг оруулж өгнө.

app.dicon


14-р мөрөнд байгаа код нь товчлуурыг дарахад addAction-ий calculate() method-ийг дуудна.

add.dicon файлд addAction-ийг тодорхойлно.

add.dicon



package examples.jsf.action;
public interface AddAction {

public String calculate();

}

package examples.jsf.action.impl;

import examples.jsf.action.AddAction;
import examples.jsf.dto.AddDto;

import examples.jsf.logic.AddLogic;

public class AddActionImpl implements AddAction {

private AddDto addDto;
private AddLogic addLogic;

public void setAddDto(AddDto addDto) {

this.addDto = addDto;

}

public void setAddLogic(AddLogic addLogic) {
this.addLogic = addLogic;

}

public String calculate() {

int result = addLogic.calculate(addDto);

addDto.setResult(result);

return null;

}}

Оруулсан утгыг хүлээн авахын тулд addDto-ий setter method-ийг тодорхойлж өгнө. S2JSF нь ямар нэг property-ийн setter method тодорхойлогдсон эсэхийг шалгадаг. request аттрибутууд, parameter-үүд, session аттрибутууд, мөн S2Containter-үүдэд ямар нэгэн хувьсагчийн property-тай адил property байвал S2JFS нь шалгаад хэрвээ таарч байвал S2JSF нь автоматаар setter method-ийг нь дуудаж хувьсагчид утга олгоно.

Property-ийн төрөл нь Interface байхад addLogic-ийн хувьсагч нь хаана нэгтээ тодорхойлогдоогүй бол S2Container нь автоматаар Interface-ийн хэрэгжүүлэгч класст автоматаар set хийдэг.

add.dicon файлд AddLogic хэрэгжүүлэгч классыг тодорхойлсон байна.




MethodBinding-аар дуудагдсан method нь null-ийг буцаана. Энэ нь өөрлүүгээ буцна.

forEachList.html
















8аас 24-р мөр хүртэл span элементийн forEach-ийг ашиглаж давталт хийж байна. Items аттрибут нь хэрхэн давтахыг, var аттрибут давталтанд дамжуулах утгаруу хандсан хувьсагчийн нэр, varIndex аттрибут нь давталтыг хянах хувьсагч гэж тус тус заасан байна.
Var аттрибут-д тодорхойлсон хувьсагчийн нэрийн property-оор давталтанд элементийн утгыг авна.
Жишээ нь: 11 болон 12 мөрүүдэд, давталтандах элементүүдийн нэр болон key-ийн утгыг авсан байна.
13-р мөр, href аттрибут болон action аттрибутуудыг тодорхойлсон байна. Ийм тохиолдолд, ажиллаж байх явцад href-ийг алгасна. href аттрибут нь хэдийгээр тийм боловч web browser-оос уг html файлыг нээхэд ямар нэг хуудасруу үсрэнэ.
14-р мөр, param-ийг хэрэглэж параметрыг дамжуулж байна. Параметр нь дамжуулах URI-лүү дамжих болно.
18-р мөр, action аттрибут болон onclick аттрибуттай товчлуурын жишээг харуулсан байна.
20-р мөр, товчлуур дарагдсан үед параметрыг хуудасруу дамжуулна.

forEachResult.html












2-р мөрөнд action аттрибутаар initialization method-ийг заасан байна. Action класс нь доор тодорхойлогдсон байна.
package examples.jsf.action.impl;

import java.util.List;

import examples.jsf.action.ForEachResultInitAction;

import examples.jsf.dto.ForEachDto;

public class ForEachResultInitActionImpl implements ForEachResultInitAction {

private int index;

private List forEachDtoList;

private ForEachDto forEachDto;
public void setIndex(int index) {

this.index = index;

}

public void setForEachDtoList(List forEachDtoList) {

this.forEachDtoList = forEachDtoList;

}

public ForEachDto getForEachDto() {

return forEachDto;

}
public String initialize() {

forEachDto = (ForEachDto) forEachDtoList.get(index);

return null;

}}

examples/jsf/dicon/foreach.dicon файлд forEachDtoList-ийг тодорхойлно.initMethod таг-г ашиглаж дурын method-ийг дуудаж болно.

initialize() method-д forEachDto property-ийн index-ийг set хийсэн байна. Initialize() method гүйцэтгэсний дараагаар S2JSF нь автоматаар forEachDto property-д утгыг Set хийнэ. Дараах байдлаар, тогтмолоор request -ийн оронд session-ийг set хийж болно.
public static final String property name_EXPORT = "session";

0 件のコメント: