在s:link和f:param之后的URL中不需要的参数

时间:2011-01-28 14:04:38

标签: jsf url-rewriting seam

这是代码(Seam 2,JSF 1.2)

<s:link style="color: white;" value="Full Listing "
    rendered="#{not listControl.fullList}"
    action="#{listControl.setFullList(true)}" >
    <f:param name="maxResults" value="" />
    <f:param name="firstResult" value="" />
</s:link>

<s:link style="color: white;" value="Limited Listing "
    rendered="#{listControl.fullList}" 
    action="#{listControl.setFullList(false)}" >
    <f:param name="maxResults" value="#{entityMaxResult}" />
    <f:param name="firstResult" value="" />
</s:link>

目标是使用此链接在结果列表displayin maxResults和所有结果之间切换。

原始网址是

_http://localhost:8080/ond/ONDList.seam?maxResults=2&state=DE

当我点击链接时,我得到了正确的功能,但结果是这个

_http://localhost:8080/ond/ONDList.seam?state=DE&actionMethod=pages%2Flist%2FONDList.xhtml%3AlistControl.setFullList%28true%29

我又点击了

_http://localhost:8080/ond/ONDList.seam?maxResults=2&state=DE&actionMethod=pages%2Flist%2FONDList.xhtml%3AlistControl.setFullList%28false%29

期待 得到的只是这两个网址:

_http://localhost:8080/ond/ONDList.seam?maxResults=15&firstResult=0&state=AL

_http://localhost:8080/ond/ONDList.seam?state=AL

这些网址上的额外参数来自哪里?

3 个答案:

答案 0 :(得分:0)

这是对的。因为你在s:seam中有一个action参数。该操作将在后端执行,然后将评估页面导航规则。

也许您想使用h:outputLink?

答案 1 :(得分:0)

您可以使用网址重写过滤器使网址看起来更漂亮。

答案 2 :(得分:0)

由于s:link正在使用 http GET 而不是 http POST ,因此seam需要以某种方式知道要调用的操作。因此,它会将操作附加到请求参数中。

如果您想避免在请求参数中看到任何内容,则必须使用生成 http post 的链接,例如<h:commandLink>

但是,我没有看到任何你想隐藏行动的理由。 如果您害怕请求伪造,可以使用组件或方法上的@Restrict@Permission注释来强制执行操作。