在JSF中获取请求参数值

我有一个组件。 在这里,我在组件中有一个页面。 我想从我的托管bean类中的页面访问一个值(inputtext或radiobutton)。 请指导我如何解决这个问题。 请注意,我不想在这里使用会话。 我只想要它。 我尝试过以下选项,但它们对我不起作用。

选项一

 String value = (String) ctx.getExternalContext() .getRequestParameterValuesMap() .get("managedbean.property"); 

选项二

 String value = (String) ctx.getExternalContext() .getRequestParameterValuesMap() .get("property"); 

选项三

 HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance() .getExternalContext().getRequest(); System.out.println(req.getParameter("property")); 

选项四

 Map requestMap = FacesContext.getCurrentInstance() .getExternalContext().getRequestHeaderValuesMap(); String msgId = (String) requestMap.get("property"); System.out.println(msgId); 

选项五

 HttpServletRequestWrapper r = new HttpServletRequestWrapper(req); String value1 = r.getParameter("managedbean.property"); 

我想要的值不在jsp的托管bean中…但我希望它在另一个托管bean中。 在这里我有一个页面内的页面(因为我已经提到它的标签面板)。 现在我想要外部选项卡的托管bean中的值 –

首先解释为什么你尝试的选项不起作用:

选项1和2无效,因为它将值(!!)作为String[] ,而不是单个值作为String

如果参数存在,则选项3应该有效。 但这不是一个很好的JSF方式。

选项4无效,因为请求标头中未设置参数。

选项5无效,因为它根本没有意义。 你只是在它们之间添加一个额外的抽象层,实际上这里没有任何改变。


JSF-ish方式是使用ExternalContext#getRequestParameterMap()

 Map parameterMap = (Map) externalContext.getRequestParameterMap(); String param = parameterMap.get("paramName"); 

至于为什么选项3不起作用可能是因为参数名称不是您想象/期望的。 JSF是基于视图树中的父UINamingContainer组件的prepends(woodstocks)客户端ID。 在Web浏览器中右键单击生成的JSF页面的HTML输出,然后选择“ 查看源” 。 检查生成的元素的名称。 请将该名称替换为参数名称。


也就是说,这毕竟是一种解决方法而不是解决方案。 但是我们无法合理地建议真正的解决方案,因为function要求和您拥有的代码并不完全清楚。 您通常将输入元素绑定到辅助bean。 如果您实际上位于不同的支持bean中,那么您也可以从支持bean内部访问该支持bean,然后再访问与其绑定的输入值。 请参阅如何相互注入托管Bean 。

您的控件位于IBM ODC面板内部这一事实并不重要。

通常,您将输入控件绑定到托管bean值。

Bean定义:

  demo foo.MyManagedBean request  

查看标签:

    

豆:

 package foo; public class MyManagedBean { private String foo; public String getFoo() { return foo; } public void setFoo(String foo) { this.foo = foo; } public String invokeMe() { System.out.println(foo); return null; //no navigation } } 

如果要将输入控件绑定到具有应用程序逻辑的bean的另一个bean,可以使用属性注入来引用另一个bean。

  demo foo.MyManagedBean request  propName #{someExpression}   

您可以通过上下文直接查找内容,或使用表达式类通过代码解析内容,但这是一种更简洁的方法。

我完全不明白你的问题。 如果inputtextradiobutton正确绑定到辅助bean中的值,则可以直接在Java中访问该值。 如果您感兴趣的是托管bean的编程查找,那么我就是这样做的:

 FacesContext facesContext = FacesContext.getCurrentInstance(); MyBean currentProperty = (MyBean) facesContext.getELContext().getELResolver().getValue(facesContext.getELContext(), null, "nameOfTheBackingBean");