要進(jìn)一步了解WebLogic Workshop方面的信息,請(qǐng)參照我們WebLogic Workshop FAQ。
1. 在頁面流流視圖中,為什么看不到由外部頁面(即不屬于當(dāng)前頁面流目錄的頁面)引發(fā)的動(dòng)作?
2. 在WebLogic Express上,可以部署使用Java頁面流(JPF)和NetUI標(biāo)簽庫的web應(yīng)用嗎?
5. 一個(gè)JSP頁面與定義消息源的JPF文件不在同一個(gè)文件夾下,該JSP如何使用此JPF中<netui:error>元素中的消息源?
6. Workshop 8.1支持Strut的DynaValidatorForm嗎?
7. 如何為使用排序服務(wù)的網(wǎng)格設(shè)置初始排序?
8. 如何指定<netui:imageButton>元素中的“action”參數(shù)?
11. 如何將動(dòng)態(tài)數(shù)據(jù)傳遞給<netui:methodParameter>標(biāo)簽?
12. 如何使第三方或特定于應(yīng)用的標(biāo)簽庫出現(xiàn)在IDE 選項(xiàng)板(Pallette)窗口中?
13. 當(dāng)在netui-data:repeater中嵌套netui-data:repeater時(shí),如何能夠訪問最內(nèi)部repeater中的外部項(xiàng)的屬性?
14. 有沒有辦法將NetUI標(biāo)簽中的XScript表達(dá)式綁定到jsp頁面中的局部變量?
15. JSLT與XScript之間有什么關(guān)系?
16. NetUI的pageContext數(shù)據(jù)綁定作用域與javax.servlet.http.PageContext屬性映射之間有什么關(guān)系?
17. 如何對(duì)NetUI標(biāo)簽庫中的各種標(biāo)簽加以分類,以使其更好理解?
19. 在頁面流數(shù)據(jù)綁定作用域內(nèi),我能夠使用的各種可用屬性有哪些?
20. 如何從當(dāng)前頁面流的JSP中調(diào)用不同頁面流中的動(dòng)作?
問:在頁面流流視圖(PageFlow View)中,為什么看不到由外部頁面(即不屬于當(dāng)前頁面流目錄的頁面)引發(fā)的動(dòng)作?
答:為了使頁面流流視圖(PageFlow View)看起來更加一目了然,Workshop在流視圖中顯示了對(duì)外部頁面(不屬于當(dāng)前頁面流目錄的頁面)的引用,但是沒有顯示任何由這些外部頁面引發(fā)的動(dòng)作。要查看由外部頁面引發(fā)的動(dòng)作,您需要在與相應(yīng)頁面所在的目錄中打開頁面流的流視圖。
問:在WebLogic Express上,可以部署使用Java頁面流(JPF)和NetUI標(biāo)簽庫的web應(yīng)用嗎?
答:答案是肯定的,使用JPF和NetUI標(biāo)簽庫的web應(yīng)用可以被用在WebLogic Express(WLX)上。然而,您不能在WLX上使用控件,因?yàn)樗鼈兪褂昧?/SPAN>EJB和/或JMS。在Service Pack 2上,頁面流和NetUI標(biāo)簽庫將能夠以一種獨(dú)立于平臺(tái)的方式為servlet容器(而不僅僅是WebLogic服務(wù)器)上的運(yùn)行時(shí)部署所用。
答:頁面流被銷毀的時(shí)候是:
a. 流移動(dòng)到不同的、不可嵌套的頁面流時(shí)
b. 被嵌套的頁面流返回到嵌套它的頁面流時(shí)
c. 當(dāng)會(huì)話超時(shí)并被銷毀時(shí)。當(dāng)前Http會(huì)話的生存期是頁面流能夠具有的最長生存期。
注意,這里有一點(diǎn)很重要,即任何被嵌套的頁面流都隱藏在嵌套頁面流的“棧”中,并且對(duì)于當(dāng)前被嵌套的頁面流來說,無需返回到嵌套它的頁面流,即可轉(zhuǎn)到外部頁面流(從而銷毀了嵌套頁面流的整個(gè)棧)。
答:您可以使用下列方法從被嵌套的頁面流中訪問嵌套頁面流。
PageFlowController parentPageFlow = PageFlowUtils.getNestingPageFlow(getRequest()); |
如果函數(shù)
"PageFlowUtils.getNestingPageFlow( getRequest() )" |
返回null,這就意味著被嵌套的頁面流是被直接調(diào)用的,而不是通過父頁面流調(diào)用的。
問:一個(gè)JSP頁面與定義消息源的JPF文件不在同一個(gè)文件夾下,該JSP如何使用此JPF中<netui:error>元素中的消息源?
答:如果您正在JSP中引用的消息源被定義為“test”文件夾(位于web項(xiàng)目的根目錄下)中頁面流的默認(rèn)消息源,那么通過在“bundle”名稱之前添加其后帶有文件夾名稱的“org.apache.struts.action.MESSAGE”前綴,您可以像下面這樣使用<netui:error>元素:
<netui:error bundle="org.apache.struts.action.MESSAGE/test" value="myerror"></netui:error> |
或者
<netui:errors bundle="org.apache.struts.action.MESSAGE/test" </netui:errors> |
如果您已經(jīng)在頁面流中使用“err”鍵定義了消息源,如下所示:
* @jpf:message-resources key="err" resources="validation.test.Errors" |
您需要將“org.apache.struts.action.MESSAGE”字符串替換為鍵值,如下所示:
<netui:error bundle="err/test" value="myerror"></netui:error> |
問:Workshop 8.1支持Struts的DynaValidatorForm嗎?
答:Workshop 的8.1版本不支持Struts的DynaValidatorForm。
問:如何為使用排序服務(wù)的網(wǎng)格設(shè)置初始排序?
答:在版本8.1中,SortFilterService不支持設(shè)置過濾器的初始排序。您始終可以在JPF中手動(dòng)創(chuàng)建一個(gè)排序,或者在RowSet控件上的SQL中使用靜態(tài)的WHERE或ORDER BY子句。關(guān)于這些方法惟一的限制是,當(dāng)為頁面添加書簽時(shí),排序與過濾器不會(huì)反映在所使用的URL中。
問:如何指定<netui:imageButton>元素中的“action”參數(shù)?
答:<netui:imageButton>元素不支持“action”參數(shù)。它總是前移到與表單相關(guān)的默認(rèn)動(dòng)作。您可以使用<netui:imageAnchor>元素作為代替,如下所示:
<netui:imageAnchor border="0" action="foo" src="/foo/bar.gif" width="68" height="24"/> |
答:不幸的是,當(dāng)前版本不支持這種行為。但存在其他兩種選擇:
1. 執(zhí)行頁面流中控件的方法,并將結(jié)果存放于request及動(dòng)作表單中傳遞給相應(yīng)的頁面。
2. 使用callControl標(biāo)簽的控制屬性中的表達(dá)式,直接綁定到一個(gè)控件,該控件在頁面流中被公開為如下形式:
<netui-data:callControl controlId="{pageFlow.myDatabaseControl}" ... /> |
接下來,您可以使用頁面流中控件實(shí)例上的注解。
問:為什么存在允許我們使用pageContext.getAttribute和pageContext.setAttribute的<netui:GetData>標(biāo)簽,卻不存在類似的<netui:SetData>標(biāo)簽?
答:getData標(biāo)簽的作用是,允許JSP作者針對(duì)由于數(shù)據(jù)綁定而產(chǎn)生的對(duì)象書寫scriptlet。我們不提供setData標(biāo)簽,因?yàn)槲覀円钩绦蛟O(shè)計(jì)模型和工具繼續(xù)支持它,使其專注于在頁面流中添加業(yè)務(wù)/狀態(tài)維護(hù)邏輯。任何對(duì)(session|request).setAttribute的調(diào)用多半應(yīng)該在一個(gè)動(dòng)作(action)內(nèi)完成。這可以避免頁面出現(xiàn)副作用,并使它們更加容易維護(hù)。
問:如何將動(dòng)態(tài)數(shù)據(jù)傳遞給<netui:methodParameter>標(biāo)簽?
答:我們可以使動(dòng)態(tài)數(shù)據(jù)可以為<netui:methodParameter>標(biāo)簽所用,具體方法是從pageContext變量來設(shè)置并訪問它,如下所示:
<% String s = "name"; pageContext.setAttribute("theName", s); %> <netui-data:callControl controlId="productsDBControl" method="insertProduct"> <netui-data:methodParameter value="{pageContext.theName}"/>> </netui-data:callControl> |
問:如何使第三方或特定于應(yīng)用的標(biāo)簽庫出現(xiàn)在IDE 選項(xiàng)板(Pallette)窗口中?
答:要在IDE中為Pallette窗口添加一個(gè)標(biāo)簽庫,您需要:
1. 將標(biāo)簽庫JAR添加到相關(guān)項(xiàng)目的WEB-INF/lib目錄中。
2. 在web.xml中添加一項(xiàng)使其指向標(biāo)簽庫的TLD文件,并賦予相應(yīng)的URI,這使得JSP文件通過該URI引用TLD。
接著,您可以打開一個(gè)JSP,查看Insert菜單或標(biāo)簽選項(xiàng)板,以確保標(biāo)簽庫中的標(biāo)簽?zāi)軌蝻@示出來。
問:當(dāng)在netui-data:repeater中嵌套netui-data:repeater時(shí),如何能夠訪問最內(nèi)部repeater中的外部項(xiàng)的屬性?
答:您可以訪問最內(nèi)部repeater中外部repeater的屬性,具體方法是使用一個(gè)形如“{container.container.*}”的表達(dá)式,其中第一個(gè)容器引用當(dāng)前的repeater,而第二個(gè)容器則引用其父repeater,等等。還有另外一種辦法,通過使用netui-data:getData標(biāo)簽,您可以在頁面上下文中的外部repeater中設(shè)置一個(gè)變量,并在形如{pageContext.*}的被嵌套的repeater中訪問該變量。
問:有沒有辦法將NetUI標(biāo)簽中的XScript表達(dá)式綁定到jsp頁面中的局部變量?
答:<netui-data:getData>標(biāo)簽可以用于計(jì)算XScript表達(dá)式的值,并將其放置到JSP的pageContext中。接下來就可以在scriptlet中訪問pageContext中的變量。例如,
<netui-data:getData resultId="first" value="{actionForm.firstname}"/> <% String firstName = (String) pageContext.getAttribute("first"); %> |
答:在當(dāng)前的版本中,JSTL的表達(dá)式語言(EL)與XScript之間沒有任何關(guān)系。您可以在需要的時(shí)候使用JSTL標(biāo)簽,而腳本語言不會(huì)彼此干擾。
問:NetUI的pageContext數(shù)據(jù)綁定作用域與javax.servlet.http.PageContext屬性映射之間有什么關(guān)系?
答:NetUI的pageContext數(shù)據(jù)綁定作用域只不過是javax.servlet.http.PageContext屬性映射頂部的一層而已。這個(gè)上下文的定義是,它訪問頁面作用域內(nèi)的名稱/值對(duì)的映射。例如,下面這種形式是合法的:
<% pageContext.setAttribute("myPageContextVar", "A Foo String"); %> |
接下來的這兩種形式是完全等同的:
<netui:content value="{pageContext.myPageContextVar}"/> |
和
|
問:如何對(duì)NetUI標(biāo)簽庫中的各種標(biāo)簽加以分類,以使其更好理解?
答:對(duì)NetUI標(biāo)簽庫值的標(biāo)簽進(jìn)行分類的基本方法是,這些標(biāo)簽是只讀的,還是可讀寫的(即是否與服務(wù)器進(jìn)行數(shù)據(jù)的交互)。
基于這標(biāo)準(zhǔn),標(biāo)簽可以被劃分為三類:
a. 只讀 Read-Only
只讀標(biāo)簽有<netui:content>和<netui:label>等等。它們從標(biāo)簽中的“value”屬性中讀取數(shù)據(jù),但不會(huì)將數(shù)據(jù)發(fā)回給服務(wù)器。
b. 讀寫單值 Read-Write Single Value
這一類的標(biāo)簽有<netui:textbox>、<netui:textarea>、<netui:checkbox>等等。這些標(biāo)簽需要了解兩件事情:
l 在JSP呈現(xiàn)時(shí),在何處獲取數(shù)據(jù)片斷。
l 在請(qǐng)求提交時(shí),將數(shù)據(jù)片斷放置到何處。
“數(shù)據(jù)片斷”即為“dataSource”屬性的值。請(qǐng)注意,這與javax.sql.Datasource對(duì)象沒有任何關(guān)系。
c. 讀寫多值 Read-Write multiple value
這一類標(biāo)簽包括<netui:checkBoxGroup>、<netui:select>等等,它們不過是上面一類標(biāo)簽的多值版本罷了。它們同樣需要了解從何處獲取各種選項(xiàng),以便從服務(wù)器讀取并顯示給用戶。它們可以從“optionsDataSource”屬性中獲得。“dataSource”屬性被用于引用將被寫回到服務(wù)器上的數(shù)據(jù)。
答:在當(dāng)前的版本中,頁面流不支持下面這種做法,即通過在頁面流中使用Struts-merge功能以求在頁面流中使用Struts Tiles。這是因?yàn)?/SPAN>Tiles要求使用它自己的RequestProcessor,而這會(huì)干擾頁面流RequestProcessor。然而,我們的確支持Tiles模塊與頁面流在同一個(gè)Web項(xiàng)目中共存與交互。
問:在頁面流數(shù)據(jù)綁定作用域內(nèi),我能夠使用的各種可用屬性有哪些?
答:在頁面流數(shù)據(jù)綁定作用域內(nèi),可用的屬性包括任何公共字段,以及任何開發(fā)人員在特定頁面流中定義的公共JavaBean屬性。例如,下面的頁面流定義了可以與標(biāo)簽屬性中的“{pageFlow.name}”綁定的“name”屬性。
public class Controller extends PageFlowController { public String name; /** * @jpf:action * @jpf:forward name="index" path="index.jsp" */ protected Forward begin() { return new Forward("index"); } } |
問:如何從當(dāng)前頁面流的JSP中調(diào)用不同頁面流中的動(dòng)作?
答:要從當(dāng)前頁面流的JSP中調(diào)用不同頁面流中的動(dòng)作,您可以使用<netui:anchor>標(biāo)簽中的“href”屬性。(注意,您不能使用“action”屬性,因?yàn)樗荒苡糜谡{(diào)用當(dāng)前頁面流中的動(dòng)作)。您可以構(gòu)造遵循模式的URI。
"<directory>/<action>.do", |
例如:.,
<netui:anchor href="/otherPageFlow/myMethodOne.do">Do Method One</netui:anchor> |