EBS OAF 開發中 URL中的標記、加密和編碼
(版權聲明,本人原創或者翻譯的文章如需轉載,如轉載用於個人學習,請註明出處;否則請與本人聯繫,違者必究)
標記
當你在聲明式的頁面定義中指定URL參數時,你可以直接指定文本也可以指定替代值的標記,這些標記在生成時會從控件所關聯的VO對象屬性中獲取值(這也就是說,這些控件必須綁定到一個VO對象上)。這個經常被使用,比如,表中的一列要把主鍵值傳入到詳細頁面用於查詢。
標記替代示例(使用VO對象屬性名”OrderNum”):
OA.jsp?OAFunc=FWK_TBX_T_PO_PAGE&order={@OrderNum}
標記的類型
標記使用一個特殊的字符前綴來告訴OAF框架如何在運行時決定它的值(注意編碼和加密的概念在後面有描述)
l {!Attr} –在URL中放置{!}來加密屬性值(比如,
OA.jsp?...&ssn={!SSN}&...
).
使用OAPageContext.getParameter("ssn")返回的是解密後的參數值。
l {@Attr} –在URL中放置{@}來對屬性值進行編碼(比如, OA.jsp?...&addr={@EmpAdd}&...).
使用OAPageContext.getParameter("addr")返回的是解碼後的參數值。
l {$Attr} –一般的替代標記(無編碼或者加密),因此你自己要確認替代值不會打亂URL。
l {@@RETURN_TO_MENU} –就完全像演示的一樣可以用於指定一個應用組件的Destination URI屬性來把用戶返回到EBS 個人主頁頁面上去。當進行一個JSP跳轉時如果你需要指定這個的話,那麼這個的相應常量值是OAWebBeanValues.RETURN_TO_MENU_URL。
l {@@RETURN_TO_PORTAL} ––就完全像演示的一樣可以用於指定一個應用組件的Destination URI屬性來把用戶返回到一個已運行的門戶頁面。當進行一個JSP跳轉時如果你需要指定這個的話,那麼這個的相應常量值是OAWebBeanValues.RETURN_TO_PORTAL_URL。
編碼
你爲請求參數指定的所有值都必須遵守HTTP語法規則.比如,你不能傳遞一個包含空格的URL參數值;下面的參數值會引起一個運行時錯誤當相應的URL被訪問到時: buyerName=John Doe.
要解決這個問題,我們需要對這些值進行編碼,這意味着,編碼方法會使用標準的替代值來代替有問題的字符,就像下面的示例演示的: buyerName=John%20Doe.
l 當OAF框架添加參數到請求中時(比如,form字段值),它會自動對其編碼。
l 當你在調用setForward*方法過程中把參數放入請求時,OAF框架也會自動對這些值進行編碼.
l 當你往你自己組裝的URL中放置參數時(如果,比如,你通過調用setDestination方法來爲一個bean設置URL),你必須爲所有可能包含無效字符的字符串部分進行編碼.要這麼做的話,你需要傳遞這個字符串到oracle.apps.fnd.framework.webui.OAUrl工具類的encode方法中.
小技巧:如果你手工設置一個不會包含無效字符的URL參數值(比如,”value=Y”),那麼你不需要爲編碼這一步所費心。
l 當你使用OAPageContext.putParameter把值放到請求中時,如果需要的話你必須對這個字符串進行編碼。
當你調用OAPageContext.getParameter*方法時,OAF框架會自動對參數值進行解碼,除了以下幾種情況:
l 當你爲Javascript方法標記使用”#”字符時,OAF框架編碼標記值,但是當你調用pageContext.getParameter("<tokenName>")時,它不會自動對其解碼.你自己要解碼時,你需要對getParameter返回的值使用OAUrl decode方法。
l 當你調用putParameter方法放入一個編碼的值時,OAF框架不會對其解碼。在這種情況下,你也必須對getParameter返回的值使用OAUrl decode方法。
加密
加密是讓數據模糊混亂而使其難以辨認的過程。因爲URL請求參數值對用戶來說可能是可見的(隱藏的form字段值也是一樣的,如果用戶去查看HTML頁面源代碼),一般如果你在URL參數或者一個異常字段上放置了敏感數據,那麼你應該對其加密。
除了聲明式的,上面描述的基於標記的加密,OAF也在oracle.apps.fnd.framework.webui.OAPageContext中提供了方法用於手工加密和解密任何你編程放入到請求中的參數值。
注意:關於URL和請求參數的更多信息,可以參考Oracle Application Framework URL and Request Parameters
URL 標記的缺陷
就像上面的描述的,如果要在URL中使用標記的話,那麼相應的控件就必須綁定一個VO,且的URL標記中只能使用這個VO中的屬性值,
不能使用EL語言,那麼R12.2對EL的擴展支持在這裏也不能使用,不能獲取session, transaction等等中的值。
也不能同時取多個VO中的屬性值。
注意:雖然相應的控件就必須綁定一個VO,還好的是OAF不是必須讓其綁定一個VO Attribute.