The body content of a tag is a runtime entity, and you cannot
generally get it during compilation time, since it may contain
non-template texts. You need to achieve what you want in another way,
such as the use of JSP fragments.
-Kin-man
On Sat, 2005-08-20 at 00:26, wing lee wrote:
> I think it's ok in the "if" tag. When the following code
>
> ctxt.generateJavaSource("if (" + condV + "){");
> >>>> ctxt.generateBody();
> ctxt.generateJavaSource("}");
>
> is executed, the generated code is supposed to be:
>
> if(temp_name_of_condV){
>
> out.write(body_content);
>
> }
>
> the generateBody method not generates the code "body_content", but the
> "out.write(body_content)". so I can not write the code to get the value of
> the body like following:
>
> String tempName = ctxt.getTemporaryVariable();
>
> ctxt.generateJavaSource("Object "+tempName+"=");
>
> ctxt.generateBody();
>
> ctxt.generateJavaSource(";");
>
> because the generated code will be like this:
>
> Object temp_name = out.write(body_content);
> not this:
> Object temp_name = body_content;
>
> so this is what confuses me.
>
> Remy Maucherat <[EMAIL PROTECTED]> 写道:
> wing lee wrote:
> > I've tried the generateBody method, but it just generate such code
> > "write.out(body content)", don't return the value of the body content.
>
> That's odd: it's supposed to continue evaluation and code generation for
> the body, not consider nested stuff as static text. There's a good
> example with the "if" tag plugin (although, as I said, I didn't test it
> at all, so maybe it's broken).
>
> public final class If implements TagPlugin {
>
> public void doTag(TagPluginContext ctxt) {
> String condV = ctxt.getTemporaryVariableName();
> ctxt.generateJavaSource("boolean " + condV + "=");
> ctxt.generateAttribute("test");
> ctxt.generateJavaSource(";");
> if (ctxt.isAttributeSpecified("var")) {
> String scope = "PageContext.PAGE_SCOPE";
> if (ctxt.isAttributeSpecified("scope")) {
> String scopeStr = ctxt.getConstantAttribute("scope");
> if ("request".equals(scopeStr)) {
> scope = "PageContext.REQUEST_SCOPE";
> } else if ("session".equals(scopeStr)) {
> scope = "PageContext.SESSION_SCOPE";
> } else if ("application".equals(scopeStr)) {
> scope = "PageContext.APPLICATION_SCOPE";
> }
> }
> ctxt.generateJavaSource("_jspx_page_context.setAttribute(");
> ctxt.generateAttribute("var");
> ctxt.generateJavaSource(", new Boolean(" + condV + ")," + scope +
> ");");
> }
> ctxt.generateJavaSource("if (" + condV + "){");
> >>>> ctxt.generateBody();
> ctxt.generateJavaSource("}");
> }
> }
>
> Rémy
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
> ---------------------------------
> DO YOU YAHOO!?
> 雅虎免费G邮箱-中国第一绝无垃圾邮件骚扰超大邮箱
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]