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