2012-08-25 25 views
1

我想用inlinframe顯示一個彈出預覽打印頁面,這裏的彈出是我的問題:使用檢票inlineframe使打印

的Java:

Form form = new Form("form"); 
form.setOutputMarkupId(true); 
form.add(new AjaxSubmitLink("test") { 
    @Override 
    protected void onSubmit(AjaxRequestTarget art, Form<?> form) { 
     containerPrint.add(/*another inlineframe*/) 
     art.addComponent(containerPrint); 
    } 
}); 
add(form); 

HTML:

<form wicket:id="form"> 
    <input type="button" wicket:id="test"></input> 
</form> 
<div wicket:id="page" style="width: 0px;height: 0px"> 
    <iframe wicket:id="printPage" width="0px" height="0px"> 
    </iframe> 
</div> 

我想通過點擊測試按鈕 替換inlineiframe與另一個inlineiframe,但通過單擊按鈕我得到這個問題

WicketMessage: org.apache.wicket.WicketRuntimeException: component form:panel:panel:panel:mcGridViewInfo:GridViewInfo:form:<b>test not found on page</b> ir.mersad.ui.authenticationAndAuthorization.Office[id = 1], listener interface = [RequestListenerInterface name=IActivePageBehaviorListener, method=public abstract void org.apache.wicket.behavior.IBehaviorListener.onRequest()] 

Root cause: 

org.apache.wicket.WicketRuntimeException: component form:panel:panel:panel:mcGridViewInfo:GridViewInfo:form:test not found on page ir.mersad.ui.authenticationAndAuthorization.Office[id = 1], listener interface = [RequestListenerInterface name=IActivePageBehaviorListener, method=public abstract void org.apache.wicket.behavior.IBehaviorListener.onRequest()] 
at org.apache.wicket.request.AbstractRequestCycleProcessor.resolveListenerInterfaceTarget(AbstractRequestCycleProcessor.java:427) 
at org.apache.wicket.request.AbstractRequestCycleProcessor.resolveRenderedPage(AbstractRequestCycleProcessor.java:472) 
at org.apache.wicket.protocol.http.WebRequestCycleProcessor.resolve(WebRequestCycleProcessor.java:144) 
at org.apache.wicket.RequestCycle.step(RequestCycle.java:1339) 
at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1465) 
at org.apache.wicket.RequestCycle.request(RequestCycle.java:545) 
at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486) 
at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:319) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
at java.lang.Thread.run(Thread.java:722) 

Complete stack: 

org.apache.wicket.protocol.http.request.InvalidUrlException: org.apache.wicket.WicketRuntimeException: component form:panel:panel:panel:mcGridViewInfo:GridViewInfo:form:test not found on page ir.mersad.ui.authenticationAndAuthorization.Office[id = 1], listener interface = [RequestListenerInterface name=IActivePageBehaviorListener, method=public abstract void org.apache.wicket.behavior.IBehaviorListener.onRequest()] 
at org.apache.wicket.protocol.http.WebRequestCycleProcessor.resolve(WebRequestCycleProcessor.java:262) 
at org.apache.wicket.RequestCycle.step(RequestCycle.java:1339) 
at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1465) 
at org.apache.wicket.RequestCycle.request(RequestCycle.java:545) 
at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486) 

我已經知道這個問題是:

container.add(new InlineFrame("printPage", new EmptyPage())); 

導致其工作正常,當我用一個標籤代替它,但我不知道什麼問題

回答

2

這不是完全清楚什麼問題是(某些代碼顯然缺失)。看起來您正在添加一個新組件而不是替換舊組件。

試試這樣說:

public class HomePage extends WebPage { 
    private InlineFrame iframe = new InlineFrame("iframe", new OtherPage()); 

    public HomePage() { 
     iframe.setOutputMarkupId(true); 

     Form form = new Form("form"); 
     form.setOutputMarkupId(true); 
     form.add(new AjaxSubmitLink("test") { 
      @Override 
      protected void onSubmit(AjaxRequestTarget art, Form<?> form) { 
       InlineFrame newIframe = new InlineFrame("iframe", new OtherPage()); 
       iframe.replaceWith(newIframe); 
       iframe = newIframe; 
       art.add(iframe); 
      } 
     }); 
     add(form, iframe); 
    } 
} 

重要的是要

  • 呼叫replaceWith讓檢票可以更新組件樹相應
  • 改變你的iframe的參考指向新組件
3

只需替換上一幀

 @Override 
     public void onClick(AjaxRequestTarget target) { 
      InlineFrame newIframe = new InlineFrame("iframe", PersonalInformationPage.class); 
      iframe.replaceWith(newIframe); 
      iframe = newIframe; 
      target.add(iframe); 
     }