sony
sony

Reputation: 1587

ZK - Invoking ZScript function of an included sub page

Say, I have a zul page (page1.zul) like so:

<zk>
  <textbox id="textbox1" ></textbox>
  <button label="Display" onClick="display()" ></button>
  <include id="include1" ></include>
<zscript>
  display() {
    include1.setSrc("page2.zul");
    java.lang.Class[] argTypes = new java.lang.Class[]{String.class};
    org.zkoss.xel.Function fn = include1.getChildPage().getZScriptFunction("doDisplay", argTypes);
    fn.invoke(null, textbox1.value);
  }
</zscript>
</zk>

But, I get the error - "Attempt to invoke method getZScriptFunction on null value". So, include1.getChildPage() is returning a null value i.e. I am not able to retrieve "page2" using getChildPage() and I am not sure how to go about it.

My second page is shown below:(page2.zul)

<zk>
  <label id="label1" ></label>
<zscript>
  doDisplay(String value) {
    label1.setValue(value);
  }
</zscript>
</zk>

If I enter something in the textbox and click the "Display" button, I want to set the value of label in a different page(i.e page2) to the value in the textbox. The idea is to pass value of a component from one page to a zscript function of another included page.

Upvotes: 1

Views: 2624

Answers (3)

Narayan Subedi
Narayan Subedi

Reputation: 1343

You can change file1 as follows:

<zk>
  <textbox id="textbox1" ></textbox>
  <button label="Display" onClick="display()" ></button>
  <!-- <include id="include1" ></include> -->
  <div id="include"></div>
<zscript>
  display() {
    include.appendChild(Executions.createComponents("page2.zul", include, null));
  }
</zscript>
</zk>

Upvotes: 1

TonyQ
TonyQ

Reputation: 667

My suggestion is to use EventQueue instead to prevent the coupling of the two zul file.

More details, please reference to the sample code. http://zkfiddle.org/sample/379s7ev/3-A-sample-for-using-Event-queue-to-talk-with-other-include

Upvotes: 0

user1122857
user1122857

Reputation:

You can do this instead of Passing value.

in Page2.zul

 <zk>
      <label id="label1" ></label>
    <zscript>
      doDisplay(String value) {
         Textbox textbox=(Textbox)((Include)label1.getSpaceOwner()).getSpaceOwner().getFellowIfAny("textbox1");
         label1.setValue(textbox.getValue());
      }
    </zscript>
    </zk>

Upvotes: 1

Related Questions