Uploaded image for project: 'Teeda'
  1. Teeda
  2. TEEDA-11

CommandLinkでverbatimタグ以下が表示されない

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.0-beta-4
    • Fix Version/s: 1.0-beta-5
    • Component/s: None
    • Labels:
      None

      Description

      以下で、outputTextが表示されない。

      <h:form id="commandLinkForm">
      <h:inputText id="text1" value="#

      {commandLinkBean.a}

      "/>
      <h:commandLink id="link1" action="#

      {commandLinkBean.countUp}

      ">
      <f:verbatim>
      <h:outputText value="#

      {commandLinkBean.hoge}

      "/>
      </f:verbatim>
      </h:commandLink>
      </h:form>

        Activity

        Hide
        yone yone added a comment -

        verbatim単体はOKそうで、CommandLinkと組み合わせるとNGのようですね。
        同じく、teeda-exampleのlink/commandLink.jspで確認。

        Show
        yone yone added a comment - verbatim単体はOKそうで、CommandLinkと組み合わせるとNGのようですね。 同じく、teeda-exampleのlink/commandLink.jspで確認。
        Hide
        shot shot added a comment -

        <h:outputText value="#

        {commandLinkBean.hoge}

        "/>がそのまま出力されるはずなんですけど、
        CommandLinkRendererでgetRenderersChildren()をtrueにしてしまっているために
        出力されない模様。

        ただし、他のJSF実装でも同じように実装されています。
        うーん。

        Show
        shot shot added a comment - <h:outputText value="# {commandLinkBean.hoge} "/>がそのまま出力されるはずなんですけど、 CommandLinkRendererでgetRenderersChildren()をtrueにしてしまっているために 出力されない模様。 ただし、他のJSF実装でも同じように実装されています。 うーん。
        Hide
        yone yone added a comment -

        後ほどSpec確認しようと思いますが
        f:verabtimタグってJSFコンポーネントを含めないのでは?

        syntax
        <f:verbatim [escape="true|false">
        Template text and/or non-JSF action elements
        </f:verbatim>

        O'REILLY本より抜粋

        Show
        yone yone added a comment - 後ほどSpec確認しようと思いますが f:verabtimタグってJSFコンポーネントを含めないのでは? syntax <f:verbatim [escape="true|false"> Template text and/or non-JSF action elements </f:verbatim> O'REILLY本より抜粋
        Hide
        shot shot added a comment -

        Renderer.encodeChildren()で、component.getRenderersChildren()がfalseのとき
        子供のcomponentをencodeしてなかったため。

        Rendererを以下のように修正。

        public void encodeChildren(FacesContext context, UIComponent component)
        throws IOException {
        AssertionUtil.assertNotNull("context", context);
        AssertionUtil.assertNotNull("component", component);
        for (Iterator itr = component.getChildren().iterator(); itr.hasNext() {
        UIComponent child = (UIComponent) itr.next();
        child.encodeBegin(context);
        if (child.getRendersChildren())

        { child.encodeChildren(context); }

        else

        { encodeChildren(context, child); }

        child.encodeEnd(context);
        if (context.getResponseComplete())

        { break; }

        }
        }

        Show
        shot shot added a comment - Renderer.encodeChildren()で、component.getRenderersChildren()がfalseのとき 子供のcomponentをencodeしてなかったため。 Rendererを以下のように修正。 public void encodeChildren(FacesContext context, UIComponent component) throws IOException { AssertionUtil.assertNotNull("context", context); AssertionUtil.assertNotNull("component", component); for (Iterator itr = component.getChildren().iterator(); itr.hasNext() { UIComponent child = (UIComponent) itr.next(); child.encodeBegin(context); if (child.getRendersChildren()) { child.encodeChildren(context); } else { encodeChildren(context, child); } child.encodeEnd(context); if (context.getResponseComplete()) { break; } } }

          People

          • Assignee:
            shot shot
            Reporter:
            shot shot
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Due:
              Created:
              Updated:
              Resolved:

              Development