2011-07-12 11 views
2

は私が含ま.zulページでIDによって要素に到達することはできません。コントローラを持つmain.zulが1つあり、javaコントローラクラスを使ってzulページに含まれるコンポーネントを取得する必要がありますが、nullを返します。Zkにはどのように.zulページコンポーネントが含まれていますか?

私は含ま方法を知っているが、新規IDスペースを作成しますが、このコンポーネントを取得する方法はありますか?

メインZULページ

<?page title="DealerVizard.zul"?> 

<?page id="main" ?> 

<?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c"?> 
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" arg0="./Dealer" ?> 
<zk> 
    <style src="/resources/css/default.css" /> 
    <window id="Dealer" class="index" 
     apply="com.i2i.prm.controller.IndexController"> 


     <div class="content" width="100%"> 

      <tabbox id="tb" forward="onSelect=onSelect"> 
       <tabs id="tabs"> 
        <tab id="info" label="INFO" /> 
        <tab id="create" label="CREATE" /> 
        <tab id="edit" label="EDIT" /> 
        <tab id="test" label="TEST PANEL(LIST BOX)" /> 

       </tabs> 
       <tabpanels> 
        <tabpanel id="DealerInfo"> 
         <include id="DealerInfoContent" 
          src="View/Dealer/DealerInfo.zul" /> 
        </tabpanel> 
        <tabpanel id="DealerCreate"> 
         <include id="DealerCreateContent" 
          src="View/Dealer/DealerCreate.zul" /> 
        </tabpanel> 
        <tabpanel id="DealerEdit"> 
         <include id="DealerEditContent" 
          src="View/Dealer/DealerEdit.zul" /> 
        </tabpanel> 

        <tabpanel id="PagingListBox"> 
         <include id="PagingListBoxContent" // Included here 
          src="View/TEST/PagingListBox.zul" /> 
        </tabpanel> 
       </tabpanels> 
      </tabbox> 
     </div> 
    </window> 

</zk> 

PagingListBox.zul(付属ページ)

<?page id="list" ?> 

<zk> 

    <grid width="100%"> 

     <columns> 
      <column label="" /> 

     </columns> 
     <rows> 
      <row> 
       <listbox id="listModel" width="100%" height="100%" 
        visible="true" span="true" pagingPosition="top" rows="20" 
        selectedItem="@{DealerController.selected}" 
        model="@{DealerController.userList}" 
        forward="onSelect=//main/Dealer.onSelect"> 
        <auxhead> 
         <auxheader colspan="1"> 
          <textbox 
           value="@{DealerController.searchUser.name}" maxlength="9" 
           id="searchCO_ID" forward="onChanging=//main/Dealer.onSearch" 
           width="100%"> 
          </textbox> 
         </auxheader> 
         <auxheader colspan="1"> 
          <textbox 
           value="@{DealerController.searchUser.surname}" maxlength="21" 
           id="searchMSISDN" forward="onChanging=//main/Dealer.onSearch" 
           width="100%"> 
          </textbox> 
         </auxheader> 
         <auxheader colspan="1"> 

         </auxheader> 

        </auxhead> 

        <listhead> 
         <listheader label="Name" 
          sort="auto(UPPER(name))" /> 

         <listheader label="Surname" 
          sort="auto(UPPER(surname))" /> 


         <listheader label="Delete ?" /> 
        </listhead> 


        <listitem self="@{each=USERLIST}"> 

         <listcell> 
          <label value="@{USERLIST.user.name}" /> 
          <textbox 
           value="@{DealerController.tmpUser.name}" visible="false" /> 
         </listcell> 
         <listcell> 
          <label value="@{USERLIST.user.surname}" /> 
          <textbox 
           value="@{DealerController.tmpUser.surname}" visible="false" /> 
         </listcell> 

         <listcell> 
          <button label="Update" 
           forward="onClick=//main/Dealer.onUpdate" visible="false" /> 
          <button image="icons/edit-delete.png" 
           label="Delete" forward="onClick=//main/Dealer.onDelete" 
           width="100%" disabled="true" /> 
          <button label="Save" 
           forward="onClick=//main/Dealer.onSave" visible="false" /> 
          <button label="Cancel" 
           forward="onClick=//main/Dealer.onCancel" visible="false" /> 
         </listcell> 
        </listitem> 
       </listbox> 
       <paging id="pagingData" pageSize="20" /> 
      </row> 

     </rows> 
    </grid> 
</zk> 

IndexCOntroller.java

:ここでUPDATE

は私のコードです

public class IndexController extends GenericForwardComposer { private List<User> userList = new ArrayList<User>() ; AnnotateDataBinder binder; Tabbox tb; Window Dealer; private int pageCount=0; @Override public void doAfterCompose(Component comp) throws Exception { // TODO Auto-generated method stub super.doAfterCompose(comp); comp.setVariable(comp.getId() + "Controller", this, true); binder = (AnnotateDataBinder) Dealer.getVariable("binder", true); System.out.println(Path.getComponent("//list/listModel")); } public IndexController() { // TODO Auto-generated constructor stub } } 

答えて

6

通常、私は、アプリケーションのコードがしっかりとあなたのビューページでコンポーネントの構造に結合された状態になるように、他のコンポーネントにアクセスするためにPath.getComponent()方法を使用してお勧めしません。 は、あなたのケースでは、最も簡単な方法は、例えばのためになるようAbstractComponent#getFellow(String compId)方法を使用することです。あなたのリストボックスあなたのコードがまだ動作する前に、あなたのZUMLページ内の他のコンポーネントを挿入しても、将来的にそう

Include inc = (Include) Dealer.getFellow("PagingListBoxContent"); 
Listbox listModel = (Listbox) inc.getFellow("listModel"); 
System.out.println(listModel); 

UPDATE:ところでZKのブログにこの非常にトピックに関する興味深いblogpostが最近あった

0

あなたはzscriptのまたはJavaを使用して、他のID空間内の任意のコンポーネントにアクセスすることができます。それは、同じページ上にある場合、その後別のウィンドウ(ウィンドウAに成分B):

Path.getComponent("//P/A/B"); 

Path.getComponent("/A/B"); 

それは、異なるページ(ページP上のウィンドウAに成分B)である場合

あなたはここにドキュメントを見つけることができます:http://books.zkoss.org/wiki/ZK%20Developer%27s%20Reference/UI%20Composing/ID%20Space

+0

私はそれを試してみましたが、それは唯一のクラスをコントローラにbelognsビューページのために動作します。using \t \t \t System.out.println(Path.getComponent( "// includedPageID/listboxID")); nullを返します。含まれているページにはウィンドウがありません。 divタグとリストボックスのみを除外します。 – Ercan

+0

@Meko:あなたのコードは私には見えます。少し試作してみました(ZK 3.6.4)。 // list/listModelは、含まれているZULのリストボックスを解決する必要があります。複数のZULファイルでページID "list"を使用している可能性はありますか? –

1

あなたのIDを持っている含まれている場合は、内部コンポーネントを

<zk> 
    <include id="inc" src="test.zul /> 

    </zk> 

テストを取得するために、ドル記号を使用することができますあなたは "INC $ LAB1" test.zul

にラベルを取得使用することができます.zul

<zk> 
    <label id="lab1" value="test1" /> 
    </zk> 

0

あなたIndexController.javaに追加することができます。

... 
    private Include DealerInfoContent; 
... 

この方法は、あなたが親作曲に含まれるコンポーネントにアクセスすることができます。

(でも、私はそれのためにキャメルケースIDを使用することをお勧めします)。

関連する問題