在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}
您可以通过上下文直接查找内容,或使用表达式类通过代码解析内容,但这是一种更简洁的方法。
我完全不明白你的问题。 如果inputtext
或radiobutton
正确绑定到辅助bean中的值,则可以直接在Java中访问该值。 如果您感兴趣的是托管bean的编程查找,那么我就是这样做的:
FacesContext facesContext = FacesContext.getCurrentInstance(); MyBean currentProperty = (MyBean) facesContext.getELContext().getELResolver().getValue(facesContext.getELContext(), null, "nameOfTheBackingBean");