隨筆 - 170  文章 - 536  trackbacks - 0
          <2006年1月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          我參與的團隊

          隨筆分類(103)

          搜索

          •  

          積分與排名

          • 積分 - 414348
          • 排名 - 135

          最新評論

          閱讀排行榜

          通過一次小小的實踐,終于了解如何使用tomahawk中的tree2這個組件了,并且寫了小段程序,從xml中讀取樹的結構,生成一個tree,不過tree2不能直接和xml綁定是一個遺憾,那樣就會省不少事情了。記下一點心得,以供后來參考了。

                   tree2的操作分為兩部分,一部分是在頁面中通過tag定義樣式相關的東西,一部分就是通過編程添加樹的節點,起初看了sample以后總是以為這東西有多么的復雜,其實邏輯是很簡單的,只是sample中定義了多種不同的樣式的節點,看上去很復雜而已。

          下面附上我對sample簡化過的這段tag來說明一下。

          <t:tree2 value="#{catalog.node}" var="node" id="clientside" varNodeToggler="t" >

              <f:facet name="folder">

                  <h:panelGroup>

                      <f:facet name="expand">

                          <t:graphicImage value="images/yellow-folder-open.png" rendered="#{t.nodeExpanded}" border="0"/>

                      </f:facet>

                      <f:facet name="collapse">

                          <t:graphicImage value="images/yellow-folder-closed.png" rendered="#{!t.nodeExpanded}" border="0"/>

                      </f:facet>

                      <h:outputText value="#{node.description}"/>

                  </h:panelGroup>

              </f:facet>

          </t:tree2>

          tree2的主tag定義了tree的根節點和一些相關的參數。嵌套的那個facet定義了一種節點的樣式,包括展開與關閉時的圖片,以及顯示的文字內容。

          在程序里面,我們root TreeNodeBase = new TreeNodeBase(…)來創建一個root節點,然后通過root.getChildren().add(new TreeNodeBase(…))為其添加子節點,任何一個節點都可以添加任意多的子節點,通過這樣的操作,我們可以很容易的生成一個tree的結構了,實際上,這個tree的結構是通過遞歸從xml中讀取出來,生成一個和xml tree完全相同的結構。

          除了明白如何去用這個tree2之外的收獲就是,終于明白了如何去通過遞歸方法遍歷一個樹形結構,雖然在學校里學過遍歷的算法,也抄過例程,但從來沒有理解過是怎么一回事,終于在實踐中理解了,實踐才是軟件的根本之道。
             程序的其它部分放在附件里面了,如果有興趣了可以和我討論tree2,討論其它JSF的東西。
             http://www.aygfsteel.com/Files/steady/catalog.rar

          posted on 2005-12-01 09:26 steady 閱讀(10331) 評論(32)  編輯  收藏 所屬分類: JSF & Myfaces

          FeedBack:
          # re: JSF Tree2 實踐 2005-12-03 15:06 山人
          你好,請問如何在字節點上設置超鏈接。比如點樹的任一節點我想讓頁跳到我指定的頁(x.jsp?id=123).
          急用,請老兄幫幫忙.
          我的email:taoyinzhou@hotmail.com  回復  更多評論
            
          # re: JSF Tree2 實踐 2005-12-04 10:15 steady
          附上我頁面的代碼:
          http://www.aygfsteel.com/Files/steady/catalogview.rar
          我是用commandLink來做的鏈接,按照你的要求,可以用outputLink來做鏈接。
          把我相應的代碼替換掉就可以了。
          后面的id=XXX,是在<f:param>里面指定的并且嵌套在outputLink里面。  回復  更多評論
            
          # re: JSF Tree2 實踐 2005-12-10 08:40 山人
          你好,我那個問題如你說的已經解決了。

          我是在做一個翻版的項目,以前是我用.net做(asp.net+C#+NHibernate+sqlServer)的,現要把它做成跨平臺的java版,所以選用了jsf(myfaces)+spring+hibernate方案。整了快一個月了,終于調試通過了用戶認證和功能樹生產(數據庫用mysql),感覺java是比.net復雜多了。
          今天開始學用myfaces的dataScroller組件。  回復  更多評論
            
          # re: JSF Tree2 實踐 2005-12-10 14:04 steady
          在現階段,JSF在標準,實現,工具支持,第三方組件上要比ASP.NET差不少,特別是擴展,除了tomahawk好一點外就沒有太多又免費又好用的組件了。工具上,我目前看到最好用的就是BEA Workshop Studio(M7 NitroX),最新版本是 3.0M2,支持最新發布的tomahawk的所有組件,可視化編輯功能也比較好。  回復  更多評論
            
          # re: JSF Tree2 實踐 2005-12-10 14:32 山人
          沒有用過 BEA Workshop Studio(M7 NitroX) ,我現在用eclipse3.1+myEclipse4.0(破解版).
          JSF Myaces(tomahawk)雖然目前資源不多,不過我還是看好的。  回復  更多評論
            
          # re: JSF Tree2 實踐 2005-12-10 16:45 steady
          我們這里做項目時用的是Exadel,感覺是對JSF支持的算是僅次于Workshop,目前來看MyEclipse感覺還是比較適合做struts時代的東西。  回復  更多評論
            
          # re: JSF Tree2 實踐 2005-12-20 17:13 山人
          java.lang.IllegalStateException: Encountered a node [0] + with an illogical state. Node is expanded but it is also considered a leaf (a leaf cannot be considered expanded.
          我在用tree2時出現如上錯誤,不知如何解決。
          我把部門表生成tree2樹顯示,在新增和修改節點時顯示正常;但我在刪除節點時如果當前節點下有兩個以上的子節點運行正常,當其下只有一個子節點時就出以上錯誤了。
          這個錯誤出現后我關閉IE從新再打開此頁,功能樹又顯示正常了。  回復  更多評論
            
          # re: JSF Tree2 實踐 2005-12-20 18:15 steady
          在Myfaces的JIRA上有這樣的錯誤報告,我也碰到過的,是一個bug,現在新的nightly build中沒有這樣的問題,但因為不是一個release版本,所以其他地方可能會有一些bug。  回復  更多評論
            
          # re: JSF Tree2 實踐 2005-12-21 09:38 山人
          謝謝
          問題解決了。我下了一個 myfaces-20051215 版本測試正常  回復  更多評論
            
          # re: JSF Tree2 實踐 2006-01-04 09:48 山 人
          你好,我在用戶登錄以后,想記錄下用戶名、用戶ID、等信息,以備在登錄后的其它頁面中可以取出用戶ID。在用純jsp(java代碼寫在jsp頁中)寫代碼時,可以在登錄頁面后把ID等定義為session如下:
          session.putValue("UserID", Integer.toString(intUSERID)); //用戶ID
          session.putValue("UserName",User_Name);//用戶登錄名
          session.putValue("UserGroupID","0");//用戶組ID
          我在登錄后的其它頁面中只用取出以上session就OK了。

          請問在jsf中實現同樣的功能應該如何做?配置如下,已經可以定義session,只是不清楚在登錄后的其它Bean中如何取出session,因為我的功能樹要根據誰登錄的取對應的功能。

          <managed-bean>
          <description>
          用戶登錄
          </description>
          <managed-bean-name>sysLogin</managed-bean-name>
          <managed-bean-class>com.inphit.pms.web.system.SysLogin</managed-bean-class>
          <managed-bean-scope>session</managed-bean-scope>
          <managed-property>
          <property-name>serviceLocator</property-name>
          <value>#{ServiceLocatorImpl}</value>
          </managed-property>
          </managed-bean>  回復  更多評論
            
          # re: JSF Tree2 實踐 2006-01-13 11:07 巨土無比
          你好,問個基礎的問題:
          rendered="#{t.nodeExpanded} 和 value="#{node.description} 里面的t和node是不是<t:tree2 value="#{catalog.node}" var="node" id="clientside" varNodeToggler="t" > 里面的var和varNodeToggler? 這兩個有什么區別嗎? nodeExpanded和description這兩個方法是在哪里定義的?  回復  更多評論
            
          # re: JSF Tree2 實踐 2006-01-13 11:13 steady
          第一個var表示tree中的一個節點,即backing bean中new出來的new TreeNodeBase("folder", name, id, false);
          varNodeToggler指的是當前tree節點的狀態,展開或者關閉,可以參考javadoc中org.apache.myfaces.custom.tree2.TreeStateBase,這里使用了它的isNodeExpanded方法。   回復  更多評論
            
          # re: JSF Tree2 實踐 2006-01-13 11:33 巨土無比
          我寫了一個簡單樹,但是無法展開,只能顯示根節點,幫忙看看哪里的問題:
          jsp:
          <f:view>
          <t:tree2 id="clientTree" value="#{tree.treeData}" var="node" varNodeToggler="t" showRootNode="false">
          <f:facet name="menu">
          <h:panelGroup>
          <f:facet name="expand">
          <t:graphicImage value="images/person.png" rendered="#{t.nodeExpanded}" border="0"/>
          </f:facet>
          <f:facet name="collapse">
          <t:graphicImage value="images/person.png" rendered="#{!t.nodeExpanded}" border="0"/>
          </f:facet>
          <h:outputText value="#{node.description}" styleClass="nodeFolder"/>
          </h:panelGroup>
          </f:facet>

          <f:facet name="item">
          <h:panelGroup>
          <h:commandLink immediate="true" styleClass="#{t.nodeSelected ? 'documentSelected':'document'}" actionListener="#{t.setNodeSelected}">
          <t:graphicImage value="images/document.png" border="0"/>
          <h:outputText value="#{node.description}"/>
          </h:commandLink>
          </h:panelGroup>
          </f:facet>
          </t:tree2>
          </f:view>
          -------------------------------------
          Tree.java:
          public TreeNode getTreeData()
          {
          TreeNode treeData = new TreeNodeBase("root", "根", false);

          // construct a set of fake data (normally your data would come from a database)

          // populate Frank's portion of the tree
          TreeNodeBase menuNode = new TreeNodeBase("menu", "產品管理", false);
          menuNode.getChildren().add(new TreeNodeBase("item", "錦囊", true));
          treeData.getChildren().add(menuNode);

          // populate Betty's portion of the tree
          menuNode = new TreeNodeBase("menu", "后綴管理", false);
          menuNode.getChildren().add(new TreeNodeBase("item", "神秘園", true));
          treeData.getChildren().add(menuNode);

          menuNode = new TreeNodeBase("menu", "用戶統計", false);
          menuNode.getChildren().add(new TreeNodeBase("item", "伊甸園", true));
          treeData.getChildren().add(menuNode);

          menuNode = new TreeNodeBase("menu", "其它", false);
          menuNode.getChildren().add(new TreeNodeBase("item", "預警設置", true));
          treeData.getChildren().add(menuNode);

          return treeData;
          }  回復  更多評論
            
          # re: JSF Tree2 實踐 2006-01-13 11:34 巨土無比
          只能顯示:
          產品管理

          后綴管理

          用戶統計

          其它

          但是無法展開,點擊后沒有任何反應  回復  更多評論
            
          # re: JSF Tree2 實踐 2006-01-13 11:38 巨土無比
          現在可以了,剛才是用的firefox,現在用的是ie就可以了,有意思,還有這限制呢  回復  更多評論
            
          # re: JSF Tree2 實踐 2006-01-13 11:51 steady
          Tree2本身并沒有這個問題的,我一直是在FireFox下跑的,一直很正常,但是Myfaces 1.1.1版本的Tree2確實有bug,可以拿比較新的源碼Build一下,應該能夠解決這個問題。  回復  更多評論
            
          # re: JSF Tree2 實踐 2006-01-13 11:52 巨土無比
          又有問題了,用ie的話,如果刷新一下,又報錯說“網頁有錯誤”,然后就又無法展開了,只有新打開一個ie或者在原來的ie上回車才可以正常顯示,請問這是什么原因呢?  回復  更多評論
            
          # re: JSF Tree2 實踐 2006-01-13 11:55 巨土無比
          最新的myfaces就是1.1.1啊,你是說用nightly builds?我的qq:601998086,加我吧,聊起來方便,驗證信息填myfaces吧,呵呵。  回復  更多評論
            
          # re: JSF Tree2 實踐 2006-01-14 07:52 kingwell
          tree2不是太穩定
          做過兩個tree交互移動其中一個tree的node到另外一個tree上面,有時候會發生illegalstate的問題,感覺不是太穩定  回復  更多評論
            
          # re: JSF Tree2 實踐 2006-03-11 09:14 hunter
          tree2的value綁定javabean的屬性,那屬性類型到底是TreeModel,還是TreeNode?在有的例子中用的是TreeNode(見上文),有的用TreeModel(見Tree2 Explained 解析Tree2一文)。
          我覺得應該用TreeModel。  回復  更多評論
            
          # re: JSF Tree2 實踐 2006-03-31 10:20 wanfan
          @巨土無比
          我像上面那樣做 也出現這樣的問題 只能顯示根節點 不能顯示葉子節點   回復  更多評論
            
          # re: JSF Tree2 實踐 2006-04-26 11:00 128kj_com
          非常想與貴站做友情鏈接,誠邀您到我站自助添加,立即生效,首頁顯示。
          http://www.128kj.com  回復  更多評論
            
          # re: JSF Tree2 實踐 2006-05-23 13:36 huyan722
          @巨土無比
          你可能缺少Filter,我也遇到過這樣的問題但是在web.xml中加入Filter后就解決了
          <filter>
          <filter-name>MyFacesExtensionsFilter</filter-name>
          <filter-class>org.apache.myfaces.component.html.util.ExtensionsFilter</filter-class>
          <init-param>
          <param-name>maxFileSize</param-name>
          <param-value>20m</param-value>
          <description>Set the size limit for uploaded files.
          Format: 10 - 10 bytes
          10k - 10 KB
          10m - 10 MB
          1g - 1 GB
          </description>
          </init-param>
          </filter>

          <!-- extension mapping for adding <script/>, <link/>, and other resource tags to JSF-pages -->
          <filter-mapping>
          <filter-name>MyFacesExtensionsFilter</filter-name>
          <!-- servlet-name must match the name of your javax.faces.webapp.FacesServlet entry -->
          <servlet-name>Faces Servlet</servlet-name>
          </filter-mapping>

          <!-- extension mapping for serving page-independent resources (javascript, stylesheets, images, etc.) -->
          <filter-mapping>
          <filter-name>MyFacesExtensionsFilter</filter-name>
          <url-pattern>/faces/myFacesExtensionResource/*</ url-pattern>
          </filter-mapping>
          如果你在項目中沒有使用到Myfaces的擴展組件(t:開頭的),則你不需要配置這個Filter.
          可是,如果你用了Myfaces的擴展組件,你必須為你的web程序配置這個Filter.
            回復  更多評論
            
          # re: JSF Tree2 實踐 2006-11-18 20:54 jsf_beginner
          請問例子的BaseBean是哪個包里的?
            回復  更多評論
            
          # re: JSF Tree2 實踐 2007-01-12 22:35 lion.huang
          你好,能把那個backbean原代碼傳我一份嗎?
          謝謝!
          email:lion_6@163.com
          QQ:262542058  回復  更多評論
            
          # re: JSF Tree2 實踐[未登錄] 2007-03-15 17:23 K
          請問能不能給樹的節點加上右鍵菜單?  回復  更多評論
            
          # re: JSF Tree2 實踐 2007-07-11 12:44 仙子
          用TREE2做一個帶選擇框的樹,如何做到點上一級的選擇框,自動點選下一級的選擇框  回復  更多評論
            
          # re: JSF Tree2 實踐[未登錄] 2007-09-19 00:02 simon
          麻煩給我發一份myfaces-20051215 ,simon_cheng1@hotmail.com
          多謝  回復  更多評論
            
          # re: JSF Tree2 實踐 2007-11-14 17:10 wbaihp
          請問我按照你們的說法作了一下,為什么我的<t:graphicImage value="../images/yellow-folder-open.png"
          rendered="#{t.nodeExpanded}" border="0" />中提示
          t cannot be resolved  回復  更多評論
            
          # re: JSF Tree2 實踐 2008-02-01 08:43 legend_only
          現在我展開TREE2樹的根結點,怎么才能做到呢???

          還有個問題就是樹的結點展開后,在關閉,前面的圖標就不變了,還是展開時的.
          頁面剛載入的時候是正確的,是關閉的圖標,展開后就回不去了~~  回復  更多評論
            
          # re: JSF Tree2 實踐 2008-05-20 13:55 bryan
          你好,我想問一下的是我用
          <h:commandLink immediate="true" styleClass="#{t.nodeSelected ? 'documentSelected':'document'}" actionListener="#{t.setNodeSelected}"
          action="#{treeMenu.nodeClicked}" target="content">
          <t:graphicImage value="images/document.png" border="0"/>
          <h:outputText value="#{node.description}"/>
          <f:param name="nodeid" value="#{node.identifier}"/>
          </h:commandLink>

          在nodeClicked我用的是返回nodeid的值,再通過face-config.xml中的設置導航到一個頁面上,不知還有沒有更好的辦法啊?想知道你的nodeClicked的事件代碼是怎樣啊?
          我現在的是用一個框架將主頁面分為三個部分,通過點擊樹形菜單導航到相應的功能頁面  回復  更多評論
            
          # re: JSF Tree2 實踐 2008-05-20 13:56 bryan
          我的聯系郵箱chizeng@126.com  回復  更多評論
            
          主站蜘蛛池模板: 南城县| 嫩江县| 广宁县| 含山县| 财经| 娱乐| 达孜县| 大港区| 昌邑市| 革吉县| 永年县| 岚皋县| 温宿县| 外汇| 施甸县| 石阡县| 阳东县| 深圳市| 进贤县| 营口市| 博客| 西平县| 旬阳县| 闽清县| 读书| 铜山县| 卓尼县| 德兴市| 耒阳市| 耿马| 荆门市| 阿拉善右旗| 左云县| 湖口县| 田东县| 乃东县| 四川省| 秦安县| 延川县| 西昌市| 喜德县|