Java 如何隐藏我的url参数?

Java 如何隐藏我的url参数?,java,jsp,url,portlet,Java,Jsp,Url,Portlet,我有几个portlet,其中有一些链接,我只想隐藏URL参数。因此,我认为包含一些jQuery代码是很容易的,它为每个jQuery代码构建一个表单,并在表单上绑定一个单击事件以提交表单 这是行不通的。由于某种原因,操作请求未命中 是否有人对隐藏URL参数有不同的建议?默认情况下,链接会触发GET请求。如果不通过URL传递参数,则无法启动HTTPGET请求。唯一能做到这一点的是HTTPPOST。然后,所有参数都包含在请求正文中。但是您需要将所有链接替换为带有按钮的表单,并且需要修改服务器端代码,以

我有几个portlet,其中有一些链接,我只想隐藏URL参数。因此,我认为包含一些jQuery代码是很容易的,它为每个jQuery代码构建一个表单,并在表单上绑定一个单击事件以提交表单

这是行不通的。由于某种原因,操作请求未命中


是否有人对隐藏URL参数有不同的建议?

默认情况下,链接会触发
GET
请求。如果不通过URL传递参数,则无法启动HTTP
GET
请求。唯一能做到这一点的是HTTP
POST
。然后,所有参数都包含在请求正文中。但是您需要将所有链接替换为带有按钮的表单,并且需要修改服务器端代码,以便它侦听
POST
请求,而不是
GET
请求,从而采取相应的操作


Javascript还可以在
XMLHttpRequest
的帮助下在“后台”触发GET请求,但是当客户端禁用JS时,应用程序将中断或仍然显示参数。此外,客户端对JS代码具有完全控制权,因此它不一定对客户端“隐藏”参数,而只从浏览器地址栏中隐藏参数。

默认情况下,Links会触发
GET
请求。如果不通过URL传递参数,则无法启动HTTP
GET
请求。唯一能做到这一点的是HTTP
POST
。然后,所有参数都包含在请求正文中。但是您需要将所有链接替换为带有按钮的表单,并且需要修改服务器端代码,以便它侦听
POST
请求,而不是
GET
请求,从而采取相应的操作

<a href="#" onclick="JavaScript: handleThisLink();"> description of link </a>
<form name="mydataform" id="mydataform" action="/actionurlonyoursite" method="post">
  <input type="hidden" name="myparam" value="" />
</form>
<script type="text/javascript">
function handleThisLink()
{
    // access the hidden element in which you wish to pass the value of the parameter
    dojo.byId("myparam").value = "myvalue";
    // the value might be precomputed (while generating this page) or 
    // might need to be computed based on other data in the page
    // submit the form by HTTP POST method to the URL which will handle it.
    document.forms['mydataform'].submit();
    // also possible to actually send a background AJAX request and publish
    // the response to some part of the current page, thus avoiding full
    // page refresh
    // I used dojo.byId() as a shortcut to access the input element
    // this is based on dojo toolkit.
}

</script>
Javascript还可以在
XMLHttpRequest
的帮助下在“后台”触发GET请求,但是当客户端禁用JS时,应用程序将中断或仍然显示参数。此外,客户端对JS代码拥有完全控制权,因此它不一定对客户端“隐藏”参数,而只从浏览器地址栏中隐藏参数。


<a href="#" onclick="JavaScript: handleThisLink();"> description of link </a>
<form name="mydataform" id="mydataform" action="/actionurlonyoursite" method="post">
  <input type="hidden" name="myparam" value="" />
</form>
<script type="text/javascript">
function handleThisLink()
{
    // access the hidden element in which you wish to pass the value of the parameter
    dojo.byId("myparam").value = "myvalue";
    // the value might be precomputed (while generating this page) or 
    // might need to be computed based on other data in the page
    // submit the form by HTTP POST method to the URL which will handle it.
    document.forms['mydataform'].submit();
    // also possible to actually send a background AJAX request and publish
    // the response to some part of the current page, thus avoiding full
    // page refresh
    // I used dojo.byId() as a shortcut to access the input element
    // this is based on dojo toolkit.
}

</script>
函数handleThisLink() { //访问要在其中传递参数值的隐藏元素 dojo.byId(“myparam”).value=“myvalue”; //该值可能是预计算的(生成此页时)或 //可能需要根据页面中的其他数据进行计算 //通过HTTP POST方法将表单提交到将处理表单的URL。 document.forms['mydataform'].submit(); //也可以实际发送后台AJAX请求并发布 //对当前页面的某些部分的响应,因此避免了完整的 //页面刷新 //我使用dojo.byId()作为访问输入元素的快捷方式 //这是基于DojoToolkit的。 }

函数handleThisLink()
{
//访问要在其中传递参数值的隐藏元素
dojo.byId(“myparam”).value=“myvalue”;
//该值可能是预计算的(生成此页时)或
//可能需要根据页面中的其他数据进行计算
//通过HTTP POST方法将表单提交到将处理表单的URL。
document.forms['mydataform'].submit();
//也可以实际发送后台AJAX请求并发布
//对当前页面的某些部分的响应,因此避免了完整的
//页面刷新
//我使用dojo.byId()作为访问输入元素的快捷方式
//这是基于DojoToolkit的。
}

您可以使用XMLHttpRequest隐藏URL参数,也可以使用servlet容器的会话变量

也许您可以使用编码url向最终用户显示复杂的数据


祝您好运

您可以使用XMLHttpRequest隐藏URL参数或使用servlet容器的会话变量

也许您可以使用编码url向最终用户显示复杂的数据


祝你好运

谢谢你的回答shailesh-就像我在问题中说的:我已经将每个链接转换为一个表单,但是我的portlet操作不是由这个表单触发的-为什么?我真的不知道。所有参数都设置好了,看起来都是对的,但我再也没有发生任何事情了,我的jboss门户似乎只在GET上做出反应,而不是在POST上。这很奇怪。在这方面,进行一些不相关的讨论可能会有所帮助。DojoToolkit(一个JavaScript库)有一个名为dijit.layout.ContentPane的小部件。您可以使用它(作为HREF)参数指定URL。当然,这个小部件只接受GET URL。要将POST操作的结果放入其中,方法是使用其setContent()方法。我的按钮处理程序将使用POST在AJAX请求中提交表单,接收响应,然后调用内容窗格的setContent方法将响应放入其中。我不知道你的JBosss门户是否可以做类似的事情。我已经通过一个“变通办法”解决了这个问题。如果我在我的操作上添加“?action=1”-这表示一个ActionURL,那么portlet正在处理必要的操作。所以我已经将“”改为“”,它可以工作了。谢谢你的回答shailesh-就像我在问题中说的:我已经将每个链接转换为一个表单,但是我的portlet操作不是由这个表单触发的-为什么?我真的不知道。所有参数都设置好了,看起来都是对的,但我再也没有发生任何事情了,我的jboss门户似乎只在GET上做出反应,而不是在POST上。这很奇怪。在这方面,进行一些不相关的讨论可能会有所帮助。DojoToolkit(一个JavaScript库)有一个名为dijit.layout.ContentPane的小部件。您可以使用它(作为HREF)参数指定URL。当然,这个小部件只接受GET URL。要将POST操作的结果放入其中,方法是使用其setContent()方法。我的按钮处理程序将使用POST在AJAX请求中提交表单,接收响应,然后调用内容窗格的setContent方法将响应放入其中。我不知道你的JBosss门户是否可以做类似的事情。我已经通过一个“变通办法”解决了这个问题。如果我在我的操作上添加“?action=1”-这表示一个ActionURL,那么Portlet ar