JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Web Framework » JSF  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 JSF 開發上的一些經驗討論
kentyeh





發文: 644
積分: 6
於 2004-10-06 22:56 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
使用了JSF 將近有一個月了,想來討論這個把月所碰到的問題

1•首先碰到的是太多的getter與setter,能想像一個Table多達百多個欄位嗎?我的解法是撰寫Convert Tag 插入到每個UIInput內,然後設定屬性為BackingBean的id,class屬性與scope,然後當Apply request values pahse時從設定的Scope取出(如果找不到就根據class屬性自行創建),轉成特定的介面(如FieldHolder),將String值delegate給該介面進行型別轉換(我就直接取得ResultSetMetaData比對欄位特性進行轉型),然後呼叫該介面的 setField,將值放入該介面保存(用Hashmap)

2•h:dataTable的處理,User希望能多筆處理(也就是User可以勾選他想要處理的Record),可是resultSetDataModle只支援RecordSet既有的欄位,這時候只好去抄Sun的原始碼,硬是插入一個假的欄位($marked)才解決了這個問題

3•最近比較頭痛的是報表問題,JSF習慣上如果驗證錯誤是在postback後進行驗證,有錯就把錯誤回到原始頁面上,所以我不能把h:form的target設到_balnk新網頁上,如果User輸入錯誤就會在新網頁出來一個一模一樣的網頁,可是如果不這麼做,報表產製後就會蓋掉整個畫面,USER找不到原來的畫面,原本想要用h:panelGroup夾f:verbatim在夾個script然後再寫window.open...,只要控制h:panelGroup的rendered屬性來決定輸不輸出javascript,可是報表檔名又是Random產生的,真是傷透了腦筋(還未找出解答)


browser edited on 2004-10-06 23:15
reply to postreply to post
作者 Re:JSF 開發上的一些經驗討論 [Re:kentyeh]
koji

秒速5センチメートル

站長

發文: 8415
積分: 19
於 2004-10-08 18:09 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
kentyeh wrote:
2•h:dataTable的處理,User希望能多筆處理(也就是User可以勾選他想要處理的Record),可是resultSetDataModle只支援RecordSet既有的欄位,這時候只好去抄Sun的原始碼,硬是插入一個假的欄位($marked)才解決了這個問題

這個?希望我沒誤會你意思
應該可以用set table layout做一個check box出來
然後你可以按按鈕時去檢查點了哪些box

koji


reply to postreply to post
JCConf Taiwan 2015 開始售票了!!
Facebook上的TWJUG社團,歡迎加入
作者 Re:JSF 開發上的一些經驗討論 [Re:kentyeh]
kentyeh





發文: 644
積分: 6
於 2004-10-10 00:11 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
koji wrote:
應該可以用set table layout做一個check box出來
然後你可以按按鈕時去檢查點了哪些box

您的意思是?
1
2
3
4
5
6
<h:dataTable value="#{backingBean.allEmployees}" var="Emp">
    <h:column>
        <h:selectBooleanCheckbox ...>
    </h:column>
    ...
</h:dataTable>

我不太清楚在使用者選取多筆員工後,您的方式在後端要如何知道哪幾個員工被選到?
因為在allEmployees我是透過RowSethttp://java.sun.com/products/jdbc/download.html#rowsetcobundle1_0取得分頁資料(User可以線上決定一頁顯示多少筆,要到第幾頁),也不知道User到底用哪一個欄位排序,我要如何才能知道操作員要操作哪幾筆員工資料?
所以我在這時候仿ResultSetDataModel implement allEmployees,假設每筆Record都包含了一個Boolean欄位$marked,待User trigger ActionListener時,我取回 EmployeeResultSetDataModel,Iterate 一下,檢查每筆資料的$marked欄位,如果值為ture,我再取出EmployeeID,進行處理。
因為您說的沒那麼仔細,所以我不知道您所說的處理方式的相關細節,也許您的方法比較好也說不定。


reply to postreply to post
作者 Re:JSF 開發上的一些經驗討論 [Re:kentyeh]
jini

SoftLeader Taiwan

版主

發文: 1266
積分: 23
於 2004-10-10 00:17 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
kentyeh wrote:
使用了JSF 將近有一個月了,想來討論這個把月所碰到的問題

1•首先碰到的是太多的getter與setter,能想像一個Table多達百多個欄位嗎?

這方法可透過 O/R Mapping 中的 Middlegen
你已經存在了 DB Table DDL , 產生 getter/setter 的 VO 是輕而易舉的


2•h:dataTable的處理,User希望能多筆處理(也就是User可以勾選他想要處理的Record),可是resultSetDataModle只支援RecordSet既有的欄位,這時候只好去抄Sun的原始碼,硬是插入一個假的欄位($marked)才解決了這個問題

應該在丟到網頁之前, 先把值放進去就好了.


3•最近比較頭痛的是報表問題,JSF習慣上如果驗證錯誤是在postback後進行驗證,有錯就把錯誤回到原始頁面上,所以我不能把h:form的target設到_balnk新網頁上,如果User輸入錯誤就會在新網頁出來一個一模一樣的網頁,可是如果不這麼做,報表產製後就會蓋掉整個畫面,USER找不到原來的畫面,原本想要用h:panelGroup夾f:verbatim在夾個script然後再寫window.open...,只要控制h:panelGroup的rendered屬性來決定輸不輸出javascript,可是報表檔名又是Random產生的,真是傷透了腦筋(還未找出解答)


看不太懂


reply to postreply to post
作者 Re:JSF 開發上的一些經驗討論 [Re:kentyeh]
kentyeh





發文: 644
積分: 6
於 2004-10-10 00:31 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
關於第一點
因為這是我第一個Java專案,所以還沒有學會如何使用一些現成的O-R Mapping Framework,所以對應到Table的Persist 物件自己寫(包含型別轉換與產生更新的SQLStatement),這點只好以後再改進
關於第三點我是希望這樣:
如果User打的資料不合需求,則在回應的網頁(同一個視窗)透過<h:message>或是<h:messages>顯示錯誤訊息,如果User打的資料都正確,則將報表丟到新視窗(Popup,不要再原視窗出現,否則User會看不到系統一些相關的超連結),目前實在還想不到比較好的方式


reply to postreply to post
作者 Re:JSF 開發上的一些經驗討論 [Re:kentyeh]
koji

秒速5センチメートル

站長

發文: 8415
積分: 19
於 2004-10-10 04:25 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
可以的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<h:dataTable binding="#{Page2.dataTable1}" headerClass="list-header" id="dataTable1" rowClasses="list-row-even,list-row-odd"
                        style="left: 24px; top: 168px; position: absolute" value="#{Page2.dataTable1Model}" var="currentRow">
<h:column binding="#{Page2.column3}" id="column3">
                            <h:outputText binding="#{Page2.outputText5}" id="outputText5" value="#{currentRow['DEPCITY']}"/>
                            <f:facet name="header">
                                <h:outputText binding="#{Page2.outputText6}" id="outputText6" value="DEPCITY"/>
                            </f:facet>
                        </h:column>
 
<h:column binding="#{Page2.column1}" id="column1">
                            <h:commandButton action="#{Page2.button1_action}" binding="#{Page2.button1}" id="button1" value="Click"/>
                            <f:facet name="header">
                                <h:outputText binding="#{Page2.outputText1}" id="outputText1" value="column1"/>
                            </f:facet>
                        </h:column>


妳試試看在後端button1_action()寫
1
this.某個output.setValue(":" + this.outputText5.getValue() );


因為他產生的html每個元件會有id
你會發現同一列都是同個類型的id
當你按鈕按下後,後端抓到時
就會是那一列的內容

同樣你現在用valuechangelistener
那麼當觸發事件時,就是那一行發生事件
你可以在valuechangelistener放log看看
只要有幾行他就會發生幾次valuechangelistener
然後裡面加判斷式去做檢查,我沒記錯的話

koji


reply to postreply to post
JCConf Taiwan 2015 開始售票了!!
Facebook上的TWJUG社團,歡迎加入
作者 Re:JSF 開發上的一些經驗討論 [Re:kentyeh]
kentyeh





發文: 644
積分: 6
於 2004-10-11 20:27 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
雖然還是有些處理上的問題,還是感謝版主的指教,有空的話,我會試一下上面的Code
感恩


reply to postreply to post
作者 Re:JSF 開發上的一些經驗討論 [Re:kentyeh]
freshia77





發文: 32
積分: 0
於 2007-08-15 17:05 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
各位大大好,想請問一下該如何在open window後直接去後端抓資料並導回呈現的頁面呢??

謝謝^^


reply to postreply to post
» JWorld@TW »  Web Framework » JSF

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8