首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在h:commandLink操作中传递查询参数值

在h:commandLink操作中传递查询参数值
EN

Stack Overflow用户
提问于 2014-09-12 20:45:20
回答 1查看 3K关注 0票数 0

尝试通过jsf targetURL操作将查询参数值(参数名为commandLink )传递给后端bean方法。

当我在下面这样做时(在param.targetURL周围加上引号),文字param.targetURL将被传递给方法:

代码语言:javascript
复制
<h:commandLink id="targetURLLink" action="#{commonTaskBean.redirectTo('param.targetURL')}"  style="display:none" />

当我在下面这样做时(没有引用param.targetURL),

代码语言:javascript
复制
<h:commandLink id="targetURLLink" action="#{commonTaskBean.redirectTo(param.targetURL)}"  style="display:none" />

我得到了一个错误NullPointerException:

代码语言:javascript
复制
 9/15/14 9:20:44:529 CDT] 00000039 SystemErr     R java.lang.NullPointerException
[9/15/14 9:20:44:529 CDT] 00000039 SystemErr     R  at org.apache.el.util.ReflectionUtil.paramString(ReflectionUtil.java:315)
[9/15/14 9:20:44:529 CDT] 00000039 SystemErr     R  at org.apache.el.util.ReflectionUtil.getMethod(ReflectionUtil.java:234)
[9/15/14 9:20:44:529 CDT] 00000039 SystemErr     R  at org.apache.el.parser.AstValue.invoke(AstValue.java:255)
[9/15/14 9:20:44:529 CDT] 00000039 SystemErr     R  at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
[9/15/14 9:20:44:529 CDT] 00000039 SystemErr     R  at org.apache.myfaces.view.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:83)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr     R  at javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:88)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr     R  at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:100)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr     R  at javax.faces.component.UICommand.broadcast(UICommand.java:120)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr     R  at javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:973)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr     R  at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:275)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr     R  at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1285)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr     R  at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:711)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr     R  at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:34)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr     R  at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr     R  at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
[9/15/14 9:20:44:530 CDT] 00000039 SystemErr     R  at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)

我将上面的代码更改如下:

代码语言:javascript
复制
<h:commandLink id="targetURLLink" actionListener="#{commonTaskBean.redirectTo}" style="display:none" >
    <f:attribute name="targetURL" value="#{param.targetURL}" />
</h:commandLink>    

但是后端bean正在获得一个空值:

代码语言:javascript
复制
String targetURL = (String) event.getComponent().getAttributes().get("targetURL");

这很奇怪,因为下面的屏幕上正确地显示了targetURL参数的值:

代码语言:javascript
复制
<h:outputText value="#{param.targetURL}"/>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-15 17:00:59

你的问题是双重的。

首先,您面临的异常是由Apache的一个相对古老的版本中的一个bug引起的。它无法正确处理作为方法参数传递的null。升级EL实现(或者更适合于容器实现),应该解决它。

其次,您似乎感兴趣的是传递使用表单打开页面时可用的请求参数,而不是在页面中提交表单时可用的请求参数。将#{param}引用为EL方法参数方法从根本上讲是错误的。#{param}引用当前请求的请求参数映射。在提交表单时,这就是表单提交请求本身。你需要的是<f:param>。它是在第一次呈现带有表单的页面时评估的(作为证据,您实际上可以在HTML源代码中看到它)。

代码语言:javascript
复制
<h:commandLink ... action="#{commonTaskBean.redirectTo}">
    <f:param name="targetURL" value="#{param.targetURL}" />
</h:commandLink>
代码语言:javascript
复制
public void redirectTo() throws IOException {
    // ...

    ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
    String targetURL = ec.getRequestParameterMap().get("targetURL");
    ec.redirect(targetURL);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25816552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档