6

page.html次のコードでは、メソッドをオーバーライドして、trackingpixel を一部のページに追加しますrenderHead(Component component, IHeaderResponse response)。これはうまくいきます。

page.html は次のようになります。

    <!doctype html>
    <html xmlns:wicket="http://wicket.apache.org/">
    <head>
    ..
    <wicket:container wicket:id="header"></wicket:container>
    </head>
    <body>
      ..
 <script wicket:id="scriptHolder" type="text/javascript" > I would like to add my script here 
</script>
..
    </body>
    </html>

TrackingPixel.java:

    public abstract class TrackingPixel extends AbstractDefaultAjaxBehavior {

            protected TrackingPixel(TrackingPixelType type) {
           ..
        }


        @Override
        public void renderHead(Component component, IHeaderResponse response) {
                response.renderOnDomReadyJavaScript("WebtrekkInstance = {
                 ..   
                             'path' : 'anyPath',
                     ...:...
                                  ..
                };
");
        }     
             }

renderHead-method メイン ページにトラッキング ピクセルを追加します。ページ上でマウスを右クリック -> ソース コードは、次のスクリプトがページに追加されたことを示しています。

<script type="text/javascript" >

Wicket.Event.add(window, "domready", function(event) {      
            WebtrekkInstance = {
             ..   
                         'path' : 'anyPath',
                 ...:...
                              ..
            };
                        ..            
            ;});
</script>

ここで、trackingpixel をポップアップに追加したいと思います。私の問題は、本文にスクリプトを追加できないことです。メソッドrenderHead(Component component, IHeaderResponse response)はそれを行いません。ポップアップが同じページにポップアップするため (私は推測します)、ヘッドが 1 つしかなく、2 回レンダリングされないからです。WebMarkupContainerだから私はあなたが以下に示すようにこれをやろうとしました.

OurServicePopup.java

/**
 * Class to display our service as popup
 */
public class OurServicePopupPage<T> extends WebPage {

    public OurServicePopupPage(PageParameters parameters) {
        super(parameters);
    }

    @Override
    protected void onInitialize() {
        add(new OurServicePixel());
        super.onInitialize();
    }      
}

OurServicePixel.java は次のようになります。

  public class OurServicePopupPixel extends TrackingPixel{
                public OurServicePopupPixel() {
                        }

                WebMarkupContainer scriptContainer = new WebMarkupContainer("scriptContainer");
                @Override
                public void renderHead(Component component, IHeaderResponse response) {   
                    scriptContainer.add(new AttributeAppender("type", Model.of("text/javascript")));
                    scriptContainer.add(
                        new AttributeAppender("src","WebtrekkInstance = {
                 ..   
                             'path' : 'anyPath',
                     ...:...
                                  ..
                };
");

          }
              add(scriptContainer); //this shows error
 }

ここでの問題は、scriptContainer を追加できないことです。 add(scriptContainer);動作でありページではないため、機能OurServicePopupPixelしません。

4

1 に答える 1

5

Labelでコンポーネントを簡単に使用できるかもしれませんsetEscapeModelStrings(false)。しかし、それは少し奇妙に思えます。

JavaScript が何をしているのか完全には理解できませんでしたが、DOM の準備ができたら実行してみてください。次のように使用しrenderHeadます。

public void renderHead(IHeaderResponse response) {
    response.render(OnDomReadyHeaderItem.forScript( ... YOUR SCRIPT HERE ... ));
}

お役に立てば幸いです。

于 2012-12-08T09:48:09.850 に答える