博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现if elseif else的jsp标签。
阅读量:6504 次
发布时间:2019-06-24

本文共 3373 字,大约阅读时间需要 11 分钟。

 相信很多使用jstl的朋友都抱怨过,为什么jstl只有c:if 而没有elseif、else。当需要判断多个条件的时候,只能写多个c:if 或者使用c:choose。

虽然struts有elseif 和 else标签,不过看着就跟多个c:if 没什么2样,使用如下:

<s:if test="">  

 1

</s:if>

<s:elseif test="">

  2

</s:elseif>

<s:else>

   3

</s:else>

 

  下面是本人实现的if elseif else。先看看使用代码:

<g:if test="">

   1

<g:elseif test="" /> 

  2

<g:else /> 

  3

</g:if>

      这样代码结构个人觉得更加清晰简单,类似freemarker的if elseif。

 

实现:

 

  要实现上面说的if elseif,需要继承BodyTagSupport,利用BodyTagSupport的bodyContent的来实现该功能,这里不具体介绍如何实现jsp tag。直接贴出所有代码,有兴趣的自己看看。  

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public 
class 
IfTag
extends 
BodyTagSupport{
 
    
public 
IfTag() {
        
super
();
        
init();
    
}
 
    
@Override
    
public 
void 
release() {
        
super
.release();
        
init();
    
}
     
    
@Override
    
public 
int 
doStartTag()
throws 
JspException {
        
if
(test){
            
this
.succeeded();
        
}
        
return 
EVAL_BODY_BUFFERED;
    
}
 
    
@Override
    
public 
int 
doEndTag()
throws 
JspException {
        
try 
{
            
if
(subtagSucceeded)
                
pageContext.getOut().write(getBody());
        
}
catch 
(IOException e) {
            
throw 
new 
JspException(
"IOError while writing the body: " 
+ e.getMessage(), e);
        
}
         
        
init();
        
return 
super
.doEndTag();
    
}
     
    
private 
String body =
null
;    
//  用于存放成功条件后的内容
    
public 
void 
setBody(){
        
if
(body ==
null
){
            
body = bodyContent.getString().trim();
        
}
    
}
     
    
private 
String getBody(){
        
if
(body ==
null
)
            
return 
bodyContent.getString().trim();
        
else
            
return 
body;
    
}
     
    
/**
     
* 判断if 或者 子 else if是否提交成功
     
*/
    
private 
boolean 
subtagSucceeded;
     
    
/**
     
* 子条件判断成功
     
*/
    
public 
void 
succeeded(){
        
subtagSucceeded =
true
;
    
}
    
/**
     
* 是否已经执行完毕
     
* @return
     
*/
    
public 
boolean 
isSucceeded(){
        
return 
subtagSucceeded;
    
}
     
    
private 
void 
init() {
        
test =
false
;
        
subtagSucceeded =
false
;
        
body =
null
;
    
}
     
    
private 
boolean 
test; 
     
    
public 
void 
setTest(
boolean 
test) {
        
this
.test = test;
    
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public 
class 
ElseIfTag
extends 
BodyTagSupport{
 
    
public 
ElseIfTag() {
        
super
();
        
init();
    
}
 
    
@Override
    
public 
int 
doStartTag()
throws 
JspException {
        
Tag parent = getParent();
 
        
if
(parent==
null 
|| !(parent
instanceof 
IfTag)){
            
throw 
new 
JspTagException(
"else tag must inside if tag"
);
        
}
         
        
IfTag ifTag = (IfTag)parent;
        
if
(ifTag.isSucceeded()){
            
// 已经有执行成功的条件,保存之前的html
            
ifTag.setBody();
        
}
else 
if
(test){    
// 当前条件为true,之前无条件为true
            
ifTag.succeeded();
            
// 则清除之前的输出
            
ifTag.getBodyContent().clearBody();
        
}
             
        
return 
EVAL_BODY_BUFFERED;
    
}
      
    
@Override
    
public 
void 
release() {
        
super
.release();
        
init();
    
}
     
    
private 
void 
init() {
        
test =
false
;
    
}
     
    
private 
boolean 
test; 
     
    
public 
void 
setTest(
boolean 
test) {
        
this
.test = test;
    
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public 
class 
ElseTag
extends 
BodyTagSupport{
 
    
public 
void 
release() {
        
super
.release();
    
}
     
    
public 
int 
doStartTag()
throws 
JspException {
        
Tag parent = getParent();
 
        
if
(parent==
null 
|| !(parent
instanceof 
IfTag)){
            
throw 
new 
JspTagException(
"else tag must inside if tag"
);
        
}
         
        
IfTag ifTag = (IfTag)parent;
        
if
(ifTag.isSucceeded()){
            
// 已经有执行成功的条件,保存之前的html
            
ifTag.setBody();
        
}
else
{
            
// 之前没有的判断没有成功条件,则清除之前的输出
            
ifTag.getBodyContent().clearBody();
            
ifTag.succeeded();
        
}
             
        
return 
EVAL_BODY_BUFFERED;
    
}
     
}

 

tld配置就不贴出来了,因为这个太简单了,大家都知道的。

本文转自BearRui(AK-47)博客园博客,原文链接: http://www.cnblogs.com/BearsTaR/archive/2010/07/29/jsp_if_elseif_else_tag.html   ,如需转载请自行联系原作者

你可能感兴趣的文章
三层架构
查看>>
Python变量类型(l整型,长整形,浮点型,复数,列表,元组,字典)学习
查看>>
解决方案(.sln)文件
查看>>
【Treap】bzoj1588-HNOI2002营业额统计
查看>>
第六周作业
查看>>
利用ZYNQ SOC快速打开算法验证通路(5)——system generator算法IP导入IP integrator
查看>>
指针和引用的区别
查看>>
运行PHP出现No input file specified错误解决办法
查看>>
【重建】从FJOI2016一试谈起
查看>>
selenium之frame操作
查看>>
php 引入其他文件中的变量
查看>>
MYSQL体系结构-来自期刊
查看>>
mysql的基本知识
查看>>
webpack入门(二)what is webpack
查看>>
UnitOfWork以及其在ABP中的应用
查看>>
学习C语言必须知道的理论知识(第一章)
查看>>
for语句内嵌例题与个人理解
查看>>
眠眠interview Question
查看>>
[转]CSS hack大全&详解
查看>>
RPC-client异步收发核心细节?
查看>>