JFinal 통합 Beetl 정적 템플릿
5434 단어 beetl
우선 beetl 패키지를 다운로드해야 합니다: Beetl 템플릿 경로
Beetl은 JFinal 프레임워크의 통합을 제공하며 BeetRenderFactory 클래스를 사용하여 다음 코드 등록을 통해 통합을 완료합니다.
@Override
public void configConstant(Constants me) {
loadPropertyFile("jdbc.properties");
//
me.setMainRenderFactory(new MyBeetlRenderFactory());
// GroupTemplate ,
GroupTemplate groupTemplate=MyBeetlRenderFactory.groupTemplate;
me.setDevMode(getPropertyToBoolean("config.devModel", false));
me.setViewType(ViewType.JSP);
me.setEncoding("UTF-8");
}
이 방법의 역할은 JFinal 프레임워크의 상수 구성 방법입니다. 여기서 제가 정의한 MyBeetlRenderFactory 클래스는 다음과 같이 BeetlRenderFactory에 상속됩니다.
package com.tenghu.core.beetl;
import org.beetl.ext.jfinal.BeetlRender;
import org.beetl.ext.jfinal.BeetlRenderFactory;
import com.jfinal.render.Render;
public class MyBeetlRenderFactory extends BeetlRenderFactory{
@Override
public Render getRender(String view) {
BeetlRender render=new BeetlRender(groupTemplate, view);
return render;
}
@Override
public String getViewExtension() {
return ".html";
}
}
BeetRenderFactory에서 기본적으로 사용하는 FileResourceLoader의 루트 디렉터리는WebRoot 아래에 있기 때문에 다른 디렉터리를 수정하려면 src 아래에 beetl,properties 속성 파일을 만들어야 합니다. 이 파일에 다음과 같은 코드를 설정해야 합니다.
RESOURCE.root=/WEB-INF/view
Beetl의 기본 설정 파일이 org/beetl/core/beetl-default에 있기 때문입니다.properties, Beetl이 시작될 때Configuration 클래스를 통해 불러오고,classpath의beetl을 불러옵니다.properties, 만약 자신이 만든beetl.properties 파일, 후자로 돌아가면 전자를 덮어씁니다
여기까지만 하면 Jfinal 통합 Beetl 템플릿이 완성된 셈이다. 다음은 실현된 효과를 살펴보자.
public void index(){
List<Users> testList=Users.dao.find("select * from users");
setAttr("testList", testList);
render("login.html");
}
여기 내가 출력한 것은login이다.html 페이지, 이 페이지는 WEB-INF/view에서 보기에 매우 편리하지 않습니까? 만약에 스스로 beetl을 설정하지 않으면.properties 파일입니다. 그러면render는 WEB-INF/view/login을 써야 합니다.html, 한 항목에 틀림없이 많은 페이지가 있을 것이다.beetl을 설정하지 않으면.properties 파일은 인터페이스에 출력된 모든 페이지에 온전한 경로를 사용해야 하기 때문에 매우 번거로운 일입니다.beetl을 설정하십시오.peoperties 파일로 중복 작업 감소
위에서 보듯이 여기에서 내가 출력한 것은 하나의 집합이다. 그러면 Beetl 템플릿을 사용하여 어떻게 집합을 옮겨다니는지 간단해진다. 다음과 같다.
<%for(test in testList){%>
<tr>
<td>${testLP.index}</td>
<td>${test.id}</td>
<td>${test.username!''}</td>
</tr>
<%}%>
이런 출력을 보면 익숙한 느낌이 들지 않나요? 참, jsp의 작은 스크립트와 차이가 많지 않은 라벨이지만 헷갈리지 마세요.
여러분도 테스트 Lp라는 변수를 보았을 것입니다. 이 변수는 beetl이 정의한 변수로 순환 체내에서 사용할 수 있습니다. 그 명칭 규범은 item과 LP가 현재 순환의 정보를 제공할 수 있습니다. 예를 들어 다음과 같습니다.
testLP.index;현재 인덱스, 1부터 시작
testLP.size;집합의 길이
testLP.first;첫 번째
testLP.last;마지막
testLP.even;짝수
testLP.odd;홀수인지 아닌지
Beetl 템플릿에서 주기에 대한 작업은 위에 있는 두 가지가 아닙니다. 위에 있는 for 주기의 형식은 for-in이고 그 다음에 다음과 같습니다.
for(exp;exp;exp)
while
elsefor
다음을 사용합니다.
for(exp;exp;exp)
<%for(var i=0;i<testList.~size;i++){%>
<tr>
<td>${testList.~size}</td>
<td>${testList[i].id}</td>
<td>${testList[i].username!''}</td>
</tr>
<%}%>
while
<%var i=0;while(i<testList.~size){%>
<tr>
<td>${testList.~size}</td>
<td>${testList[i].id}</td>
<td>${testList[i].username!''}</td>
</tr>
<%i++;}%>
for 순환에 있어 순환체에 들어가지 않았을 때elsefor 문장 블록에 들어가기 때문에elsefor는 개 단독으로 사용할 수 없습니다
<%for(var i=0;i<testList.~size;i++){%>
<tr>
<td>${testList.~size}</td>
<td>${testList[i].id}</td>
<td>${testList[i].username!''}</td>
</tr>
<%}elsefor{%>
<tr>
<td colspan="3"> </td>
</tr>
<%}%>
다음 조건문을 살펴보겠습니다. Beetl의 조건문은 다음과 같습니다.
if-else
switch-case
select-case
구체적으로 다음과 같이 사용됩니다.
<%
var a=true,b=1;
if(a&&b==1){
}else if(a){
}else{
}
%>
switch-case:
<%
var b=1;
switch(b){
case 0:
print('1');
break;
case 1:
print('2');
break;
case 2:
print('2');
break;
default:
print('error');
break;
}
%>
switch는 모든 종류를 지원할 수 있습니다select-case는 switch case의 증강판입니다.그는case에 논리적 표현식이 있는 것을 허락할 뿐만 아니라, 모든case가break를 할 필요도 없다.
조건에 맞는 케이스가 실행되면 물러나겠습니다.
<%
var b=1;
select(b){
case 0,1:
print("it's small int");
case 2,3:
print("it's big int");
default:
print("error");
}
%>
템플릿을 사용하는 동안 예외가 발생하면 다음과 같이 try-catch 처리를 사용할 수 있습니다.<%
try{
var a=10;
var b=0;
print(a/b);
}catch(error){
print(" :"+error.message);
}
%>
error는 이상을 대표합니다. error를 통해 알 수 있습니다.가능한 오류 정보를 얻기 위한 메시지catch 부분을 생략할 수도 있습니다. 이렇게 하면 이상이 발생하여 어떠한 조작도 하지 않습니다.
Beetl 템플릿은 has 및 isEmpty를 사용할 수 있는 변수의 존재 여부를 판단합니다.
간단한 Beetl 템플릿 조작은 여기까지입니다. 다른 사용을 알아야 합니다. 다운로드한 가방에 홈페이지 문서가 있습니다.