📄 tagtransformmodel.java
字号:
}
public void println(int arg0) throws IOException
{
print(arg0);
newLine();
}
public void println(long arg0) throws IOException
{
print(arg0);
newLine();
}
public void println(Object arg0) throws IOException
{
print(arg0);
newLine();
}
public void println(String arg0) throws IOException
{
print(arg0);
newLine();
}
public void write(int c) throws IOException
{
if(buf != null) {
buf.write(c);
}
else {
getEnclosingWriter().write(c);
}
}
public void write(char[] cbuf, int off, int len) throws IOException
{
if(buf != null) {
buf.write(cbuf, off, len);
}
else {
getEnclosingWriter().write(cbuf, off, len);
}
}
public String getString() {
return buf.toString();
}
public Reader getReader() {
return new CharArrayReader(buf.toCharArray());
}
public void writeOut(Writer out) throws IOException {
buf.writeTo(out);
}
}
class TagWriter extends BodyContentImpl implements TransformControl
{
private final Tag tag;
private final FreeMarkerPageContext pageContext;
private boolean needPop = true;
private final boolean needDoublePop;
TagWriter(Writer out, Tag tag, FreeMarkerPageContext pageContext, boolean needDoublePop)
{
super((JspWriter)out, false);
this.needDoublePop = needDoublePop;
this.tag = tag;
this.pageContext = pageContext;
}
public String toString() {
return "TagWriter for " + tag.getClass().getName() + " wrapping a " + getEnclosingWriter().toString();
}
Tag getTag()
{
return tag;
}
FreeMarkerPageContext getPageContext()
{
return pageContext;
}
public int onStart()
throws
TemplateModelException
{
try {
int dst = tag.doStartTag();
switch(dst) {
case Tag.SKIP_BODY:
// EVAL_PAGE is illegal actually, but some taglibs out there
// use it, and it seems most JSP compilers allow them to and
// treat it identically to SKIP_BODY, so we're going with
// the flow and we allow it too, altough strictly speaking
// it is in violation of the spec.
case Tag.EVAL_PAGE: {
endEvaluation();
return TransformControl.SKIP_BODY;
}
case BodyTag.EVAL_BODY_BUFFERED: {
if(isBodyTag) {
initBuffer();
BodyTag btag = (BodyTag)tag;
btag.setBodyContent(this);
btag.doInitBody();
}
else {
throw new TemplateModelException("Can't buffer body since " + tag.getClass().getName() + " does not implement BodyTag.");
}
// Intentional fall-through
}
case Tag.EVAL_BODY_INCLUDE: {
return TransformControl.EVALUATE_BODY;
}
default: {
throw new RuntimeException("Illegal return value " + dst + " from " + tag.getClass().getName() + ".doStartTag()");
}
}
}
catch(JspException e) {
throw new TemplateModelException(e.getMessage(), e);
}
}
public int afterBody()
throws
TemplateModelException
{
try {
if(isIterationTag) {
int dab = ((IterationTag)tag).doAfterBody();
switch(dab) {
case Tag.SKIP_BODY: {
endEvaluation();
return END_EVALUATION;
}
case IterationTag.EVAL_BODY_AGAIN: {
return REPEAT_EVALUATION;
}
default: {
throw new TemplateModelException("Unexpected return value " + dab + "from " + tag.getClass().getName() + ".doAfterBody()");
}
}
}
endEvaluation();
return END_EVALUATION;
}
catch(JspException e) {
throw new TemplateModelException(e);
}
}
private void endEvaluation() throws JspException {
if(needPop) {
pageContext.popWriter();
needPop = false;
}
if(tag.doEndTag() == Tag.SKIP_PAGE) {
logger.warn("Tag.SKIP_PAGE was ignored from a " + tag.getClass().getName() + " tag.");
}
}
public void onError(Throwable t) throws Throwable {
if(isTryCatchFinally) {
((TryCatchFinally)tag).doCatch(t);
}
else {
throw t;
}
}
public void close() {
if(needPop) {
pageContext.popWriter();
}
pageContext.popTopTag();
try {
if(isTryCatchFinally) {
((TryCatchFinally)tag).doFinally();
}
// No pooling yet
tag.release();
}
finally {
if(needDoublePop) {
pageContext.popWriter();
}
}
}
}
static class JspWriterAdapter extends JspWriter {
private final Writer out;
JspWriterAdapter(Writer out) {
super(0, true);
this.out = out;
}
public String toString() {
return "JspWriterAdapter wrapping a " + out.toString();
}
public void clear() throws IOException {
throw new IOException("Can't clear");
}
public void clearBuffer() throws IOException {
throw new IOException("Can't clear");
}
public void close() throws IOException {
throw new IOException("Close not permitted.");
}
public void flush() throws IOException {
out.flush();
}
public int getRemaining() {
return 0;
}
public void newLine() throws IOException {
out.write(NEWLINE);
}
public void print(boolean arg0) throws IOException {
out.write(arg0 ? Boolean.TRUE.toString() : Boolean.FALSE.toString());
}
public void print(char arg0) throws IOException
{
out.write(arg0);
}
public void print(char[] arg0) throws IOException
{
out.write(arg0);
}
public void print(double arg0) throws IOException
{
out.write(Double.toString(arg0));
}
public void print(float arg0) throws IOException
{
out.write(Float.toString(arg0));
}
public void print(int arg0) throws IOException
{
out.write(Integer.toString(arg0));
}
public void print(long arg0) throws IOException
{
out.write(Long.toString(arg0));
}
public void print(Object arg0) throws IOException
{
out.write(arg0 == null ? "null" : arg0.toString());
}
public void print(String arg0) throws IOException
{
out.write(arg0);
}
public void println() throws IOException
{
newLine();
}
public void println(boolean arg0) throws IOException
{
print(arg0);
newLine();
}
public void println(char arg0) throws IOException
{
print(arg0);
newLine();
}
public void println(char[] arg0) throws IOException
{
print(arg0);
newLine();
}
public void println(double arg0) throws IOException
{
print(arg0);
newLine();
}
public void println(float arg0) throws IOException
{
print(arg0);
newLine();
}
public void println(int arg0) throws IOException
{
print(arg0);
newLine();
}
public void println(long arg0) throws IOException
{
print(arg0);
newLine();
}
public void println(Object arg0) throws IOException
{
print(arg0);
newLine();
}
public void println(String arg0) throws IOException
{
print(arg0);
newLine();
}
public void write(int c) throws IOException
{
out.write(c);
}
public void write(char[] arg0, int arg1, int arg2)
throws IOException
{
out.write(arg0, arg1, arg2);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -