在我们的JSF应用程序(MyFaces Trinidad)中,我们有一个链接,点击它将启动一个使用aspx运行的应用程序(http://crd-dev:1890/Timeandreviews/Login.aspx)。由于已经对用户进行了身份验证,因此必须将用户id传递给ASPX应用程序。他们不想接收URL中的GET参数,他们需要它作为POST数据。有可能将其作为POST数据发送吗?如果可能的话,如何在JSF中发送,以及如何在ASPX中读取。
我试过在JSF (.XHTML页面)中设置如下
ExternalContext ext = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest httpRequest = (HttpServletRequest) ext.getRequest();
HttpSession httpSession = (HttpSession) ext.getSession(true);
httpRequest.setAttribute("USER_HTREQ", "TST_USR");
httpSession.setAttribute("USER_HTSES", "TST_USR");
ext.getRequestMap().put("USER_REQMP", "TST_USR");
try {
ext.redirect("http://crd-dev:1890/Timeandreviews/Login.aspx");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
并尝试在aspx中读取方法1:
string[] keys = Request.Form.AllKeys;
for (int i= 0; i < keys.Length; i++)
{
Response.Write(keys[i] + ": " + Request.Form[keys[i]] + "<br>");
}
方法二:var oSR = new StreamReader(Request.InputStream);
string sContent = oSR.ReadToEnd();
但是它们都不起作用。请帮助
由于您不仅需要发布数据,还需要重定向用户,因此Apache HttpClient不会帮助您。
最简单的解决方案是创建一个包含隐藏输入的表单,填写它们并发布表单。
<form method="post" id="form-id"
action="http://crd-dev:1890/Timeandreviews/Login.aspx">
<input type="hidden" name="input-id" id="input-id"/>
etc.
</form>
你可以从你的bean中执行javascript,像这样添加:
String script = "document.getElementById('input-id').value = 'value';"
+ "document.getElementById('form-id').submit();";
FacesContext fctx = FacesContext.getCurrentInstance();
ExtendedRenderKitService erks =
Service.getRenderKitService(fctx, ExtendedRenderKitService.class);
erks.addScript(fctx, script);