在JSF中获取请求参数值

use*_*950 20 java jsf

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

选项一

String value = (String) ctx.getExternalContext()
                        .getRequestParameterValuesMap()
                        .get("managedbean.property");
Run Code Online (Sandbox Code Playgroud)

选项二

String value = (String) ctx.getExternalContext()
                         .getRequestParameterValuesMap()
                         .get("property");
Run Code Online (Sandbox Code Playgroud)

选项三

HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance()
                         .getExternalContext().getRequest();
System.out.println(req.getParameter("property"));
Run Code Online (Sandbox Code Playgroud)

选项四

Map requestMap = FacesContext.getCurrentInstance() 
                         .getExternalContext().getRequestHeaderValuesMap(); 
String msgId = (String) requestMap.get("property"); 
System.out.println(msgId);
Run Code Online (Sandbox Code Playgroud)

选项五

HttpServletRequestWrapper r = new HttpServletRequestWrapper(req);
String value1 = r.getParameter("managedbean.property");
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 29

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

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

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

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

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


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

Map<String, String> parameterMap = (Map<String, String>) externalContext.getRequestParameterMap();
String param = parameterMap.get("paramName");
Run Code Online (Sandbox Code Playgroud)

至于为什么选项3不起作用可能是因为参数名称不是你想象/期望的那样.JSF是基于UINamingContainer视图树中的父组件预先添加(woodstocks)客户端ID .在Web浏览器中右键单击生成的JSF页面的HTML输出,然后选择" 查看源".检查生成<input>的感兴趣元素的名称.使用名称作为参数名称.


也就是说,这毕竟是一种解决方法而不是解决方案.但是我们无法合理地建议真正的解决方案,因为功能要求和您拥有的代码并不完全清楚.您通常将输入元素绑定到辅助bean.如果您在不同的后台bean里面实际上是,那么你也可以只访问从后台bean内支持bean,然后依次访问的输入值与它的约束.请参阅如何相互注入托管Bean.