日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ADF:使用HTTP POST方法进行URL任务流调用

發布時間:2023/12/3 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ADF:使用HTTP POST方法进行URL任务流调用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

眾所周知,可以通過某些URL直接從瀏覽器或某些外部應用程序調用有限任務流。 如果任務流的屬性“ URL invoke”設置為“ url-invoke-allowed”,則啟用此功能,該功能通常在集成項目中使用。 通常,客戶端(或調用者)使用HTTP GET方法并在URL中傳遞其參數。 讓我們考慮一個帶有一個必需輸入參數的簡單任務流:

<task-flow-definition id="task-flow-definition">??? <input-parameter-definition id="__23"><name id="__24">userName</name><value id="__67">#{requestScope.userName}</value><class id="__63">java.lang.String</class><required/></input-parameter-definition>??? ...

可以通過這樣的URL調用任務流

http://127.0.0.1:7101/TestApp/faces/adf.task-flow?adf.tfId=task-flow-definition&adf.tfDoc=/WEB-INF/task-flow-definition.xml&userName=xammer

客戶端使用簡單的html表單構造此GET請求:

<html><head>??? <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/></head><body><form action="http://127.0.0.1:7101/TestApp/faces/adf.task-flow"><input type="hidden" name="adf.tfId" value="task-flow-definition"/>? <input type="hidden" name="adf.tfDoc" value="/WEB-INF/task-flow-definition.xml"/>? <label>???? User Name <input type="text" name="userName" value="xammer"/>? </label><input type="submit" value="Submit"/></form></body> </html>

它看起來像這樣:

一些客戶端更喜歡使用HTTP POST方法,這是他們的要求:

<html><head>??? <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/></head><body><form action="http://127.0.0.1:7101/TestApp/faces/adf.task-flow" method="POST"><input type="hidden" name="adf.tfId" value="task-flow-definition"/>? <input type="hidden" name="adf.tfDoc" value="/WEB-INF/task-flow-definition.xml"/>? <label>???? User Name <input type="text" name="userName" value="xammer"/>? </label><input type="submit" value="Submit"/></form></body> </html>

而且效果很好。 在這種情況下,URL將如下所示:

http://127.0.0.1:7101/TestApp/faces/adf.task-flow

所有其他必要的信息(例如任務流ID和參數值)都在POST請求中。 但是問題在于,它僅對R1有效。 如果我們在R2上進行嘗試,將會得到以下結果:

ADF_FACES-30179:有關更多信息,請參見服務器的錯誤日志中以下列開頭的條目:UIViewRoot為空。 PhaseId期間的致命異常:RESTORE_VIEW 1。

為什么? 因此:

oracle.adfinternal.controller.application.InvokeTaskFlowException: ADFC-02006: A task flow ID is not found in the URL.at oracle.adfinternal.controller.util.UrlParams.getTaskFlowInfo(UrlParams.java:144)at oracle.adfinternal.controller.application.RemoteTaskFlowCallRequestHandler. invokeTaskFlowByUrl(RemoteTaskFlowCallRequestHandler.java:84)at oracle.adfinternal.controller.application.RemoteTaskFlowCallRequestHandler. doCreateView(RemoteTaskFlowCallRequestHandler.java:63)

本應在POST請求中傳遞的所有必需數據(包括任務流ID)都將丟失。 為什么? 因為“回送”。 如果在單擊“提交”按鈕后發現從瀏覽器發送到服務器的請求,我們將看到以下內容:

因此,服務器不發送“誠實”響應,而是發送一些“回送”腳本,該腳本生成“窗口ID”,并發送具有生成的窗口ID的以下GET請求。 涼! 但是所有發布數據都消失了。 GET請求絕對為空。

幸運的是,如果初始POST請求已經具有一些“窗口ID”,則該框架不會生成任何“環回”。 因此,本例的解決方法是開發一個servlet過濾器,為我們的請求設置“ window id”屬性:

public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain)throws IOException, ServletException {HttpServletRequest r = (HttpServletRequest) servletRequest;HttpSession s = r.getSession();//May be this is not an initial request and window id has been generated earlier//We want all the following requests to work with the same window id //For our use-case this is ok??? String windowID = (String) s.getAttribute(_WINDOW_ID_KEY);if (windowID == null){String pathInfo = r.getPathInfo();//This is an initial POST request to get access to the task flowif (("/adf.task-flow").equals(pathInfo) &&"POST".equals(r.getMethod())){windowID = WINDOW_ID;//Save window id in the session s.setAttribute(_WINDOW_ID_KEY, windowID);}}//Setup attribute for the request//This will prevent generating of the loopbackif (windowID != null)r.setAttribute(_WINDOW_ID_KEY, windowID);filterChain.doFilter(servletRequest, servletResponse); }private static final String __WINDOW_MANAGER_KEY = RichWindowManager.class.getName(); private static final String _WINDOW_ID_KEY = __WINDOW_MANAGER_KEY + "#WINDOW_ID";? private static final String WINDOW_ID = "wextflow";

請注意,此過濾器應位于過濾器鏈中的“特立尼達”過濾器之前:

<filter><filter-name>ExtPostFilter</filter-name><filter-class>com.cs.fusion.core.view.filter.ExtPostFilter</filter-class></filter> <filter><filter-name>trinidad</filter-name><filter-class>org.apache.myfaces.trinidad.webapp.TrinidadFilter</filter-class></filter><filter><filter-name>ServletADFFilter</filter-name><filter-class>oracle.adf.share.http.ServletADFFilter</filter-class></filter>

而已!

參考:來自ADF實踐博客的JCG合作伙伴 Eugene Fedorenko 使用HTTP POST方法進行URL任務流調用 。

翻譯自: https://www.javacodegeeks.com/2013/08/adf-url-task-flow-call-with-http-post-method.html

總結

以上是生活随笔為你收集整理的ADF:使用HTTP POST方法进行URL任务流调用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美老熟妇一区二区三区 | 国产精品1234区 | 亚洲三级影视 | 亚洲av日韩av永久无码下载 | 青草在线视频 | 黑人巨大精品欧美一区二区免费 | 国产97超碰 | 亚洲毛片在线播放 | 波多野结衣高清电影 | 少妇 av| 欧洲视频一区二区三区 | 亚洲男人天堂2018 | 欧美性生交xxxxx久久久缅北 | 精品国产乱码久久久久久蜜臀 | 三级自拍 | 黄色大片免费在线观看 | 欧美在线观看一区二区三区 | 毛片手机在线 | 老熟妇仑乱视频一区二区 | 国产少女免费观看高清 | 秋霞福利视频 | 波多野结衣黄色片 | 欲色视频 | 国产aⅴ激情无码久久久无码 | 国内自拍区 | 大尺度摸揉捏胸床戏视频 | 亚洲黄网在线 | 国产一区av在线 | 性一交一乱一色一免费无遮挡 | 人人上人人干 | 中文在线观看免费网站 | 色姑娘久 | 国产激情一区 | 美女黄色一级 | 26uuu精品一区二区在线观看 | 免费观看一区二区 | 亚洲成人播放 | 公交上高潮的丁芷晴 | 国产一区在线观看视频 | 亚洲 欧美 日韩 国产综合 在线 | 一本色道久久综合亚洲精品按摩 | 国产成年人 | 日韩欧美一区视频 | 欧美成人性生活视频 | 韩国精品av| 怎么可能高潮了就结束漫画 | 午夜寂寞影院在线观看 | 妺妺窝人体色www聚色窝仙踪 | 国产乱国产乱 | 深夜视频在线 | www.久草.com| 18深夜在线观看免费视频 | 色美av | 欧美老女人性生活视频 | 奇米超碰在线 | 免费观看全黄做爰的视频 | 欧美日本一本 | 香港三级韩国三级日本三级 | 免费国产在线视频 | 黄色特级片 | 91精品国产成人 | 国产91在线播放精品91 | 国产专区一区二区 | 免费看91的网站 | 美女网站免费黄 | 国产精品大屁股白浆一区 | 夜夜se| av免费观看网 | 色草在线 | 男女瑟瑟网站 | 一级黄色片在线播放 | 91香蕉视频在线看 | 久草热在线 | 亚洲综合色av | 亚洲一级成人 | 亚洲av日韩av不卡在线观看 | 一边摸一边抽搐一进一出视频 | 国产日本一区二区三区 | 亚洲国产精彩中文乱码av | 日本色一区 | 亚洲一二三区av | 黄色欧美大片 | 色噜噜狠狠狠综合曰曰曰88av | 黄色高清视频 | 奇米网狠狠干 | 国产午夜无码视频在线观看 | 久久国产网 | 亚洲精品久久久久久一区二区 | 成人一区av | 亚洲精品成人 | 91传媒视频在线观看 | 国产精品v欧美精品v日韩精品 | 日本久久久久久久久 | 狠狠干狠狠操视频 | 强行无套内谢大学生初次 | 亚洲加勒比 | 人妻天天爽夜夜爽一区二区三区 | 欧美日韩三级视频 | 无限资源日本好片 |