我在jsp页面上提交命令按钮时有以下代码
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
try {
externalContext.redirect("http://reportsserver.com/reports/rwservlet?server=server001&ORACLE_SHUTDOWN=YES&PARAMFORM=no&report=testrepr.rdf&desformat=pdf&desname=testrep.rdf.pdf&destype=cache&userid=scott/tiger@test¶m1=7002&faces-redirect=true");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
xhtml代码是
<h:commandButton value="Submit" action="#{helloWorldBean.submitAction}"></h:commandButton>
我需要在rwservlet之后发送所有参数吗?作为隐藏参数。这些值不是来自页面上的任何表单字段。它们是磁盘上属性文件的一部分。我不希望在加载下一个网页或下一个网页时向用户显示它们。
如果有任何方法可以将externalcontext.redirect()中的特定参数标记为以编程方式隐藏,请告知我
答案 0 :(得分:4)
那是不可能的。
您似乎无法理解HTTP的一般工作方式(GET,POST,重定向等)。重定向基本上指示客户端在给定的URL上触发GET请求。但是,为了从请求URL“隐藏”参数,您基本上需要像请求一样在请求体中发送它们。没有最终用户干预,就无法重定向到另一个POST请求。
您可以发送307重定向(ExternalContext#redirect()
默认执行302),但这只会重新发送最初提交的POST请求您似乎想要添加新的请求参数的参数。因此,这不起作用。即使您设法通过例如原始POST请求获得所需参数。 JS / ajax,然后最终用户仍然会得到一个浏览器内置的安全对话框,要求确认将提交的数据重新发送到不同的域。这可能会让最终用户感到困惑(如果最终用户之前从未见过这样的警告,它可能会选择中止)。
您 也可以充当代理,并使用以下方式自行编程处理HTTP请求URLConnection
或Apache HttpComponents客户端,但浏览器地址栏中的URL在您的域中保持不变。这可能会让最终用户感到困惑(如果它涉及到例如在线支付,那么看起来很像网络钓鱼尝试;某些防病毒程序也可能会因此而失败)。
请注意,在POST请求正文中发送参数不一定会将其隐藏在最终用户之外,他/她仍然可以在浏览器的HTTP流量监视器中看到它们;它们在浏览器的地址栏URL中不再可见。