Java 获取JSF中的请求参数值
我有一个Java 获取JSF中的请求参数值,java,jsf,Java,Jsf,我有一个组件。在这里面,我在组件中有一个页面。我想从我的托管bean类的中的页面访问一个值(inputtext或radiobutton)。请告诉我该怎么做。请注意,我不想在这里使用会话。我要的只是请求。我尝试了以下选项,但它们对我不起作用 选择一 String value = (String) ctx.getExternalContext() .getRequestParameterValuesMap()
组件。在这里面,我在
组件中有一个页面。我想从我的
托管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中的值–我不完全理解您的问题。如果
inputtext
或radiobutton
已正确绑定到支持bean中的值,则可以直接在Java中访问该值。如果您感兴趣的是托管bean的编程查找,那么我就是这样做的:
FacesContext facesContext = FacesContext.getCurrentInstance();
MyBean currentProperty = (MyBean) facesContext.getELContext().getELResolver().getValue(facesContext.getELContext(), null, "nameOfTheBackingBean");
您的控件位于IBMODC面板内这一事实与此无关 通常,您会将输入控件绑定到托管bean值 Bean定义:
<managed-bean>
<managed-bean-name>demo</managed-bean-name>
<managed-bean-class>foo.MyManagedBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
如果您想将输入控件绑定到另一个bean和具有应用程序逻辑的bean,那么可以使用属性注入来引用另一个bean
<managed-bean>
<managed-bean-name>demo</managed-bean-name>
<managed-bean-class>foo.MyManagedBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>propName</property-name>
<value>#{someExpression}</value>
</managed-property>
</managed-bean>
演示
foo.MyManagedBean
要求
专有名称
#{someExpression}
您可以通过上下文直接查找内容,或者使用表达式类通过代码解析内容,但这是一种更简洁的方法。首先解释一下您尝试的选项不起作用的原因: 选项1和2无效,因为它以
字符串[]
的形式返回值(!!),而不是以字符串的形式返回单个值
如果参数存在,选项3应该可以工作。但这不是一个很好的JSF方式
选项4无效,因为未在请求标头中设置参数
选项5是无效的,因为它根本没有意义。您只是在中间添加了一个额外的抽象层,实际上并没有改变任何东西
JSF ish的方法是使用:
Map parameterMap=(Map)externalContext.getRequestParameterMap();
字符串param=parameterMap.get(“paramName”);
至于选项3不起作用的原因,很可能是因为参数名称与您的想法/预期不同。JSF即基于视图树中的父级UINamingContainer
组件预先设置(woodstocks)客户端ID。右键单击webbrowser中JSF页面生成的HTML输出,然后选择View Source。检查生成的感兴趣的
元素的名称。改用该名称作为参数名称
这就是说,这毕竟是一个解决办法,而不是一个解决方案。但我们无法合理地建议真正的解决方案,因为功能需求和代码还不完全清楚。您通常将输入元素绑定到支持bean。如果您实际上在一个不同的backingbean中,那么您也可以从backingbean中访问该backingbean,然后依次访问与它绑定的输入值。请参阅以获取操作方法。我希望该值不在jsp的托管bean中。。。但我希望它在另一个托管bean中。在这里,我将页面放在一个页面中(正如我所提到的,它是一个选项卡式面板)。现在我想要外部的托管bean中的值tab@tejas-a-使用托管属性
将属性从一个bean注入到另一个bean中-请参阅最后一节。
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
}
}
<managed-bean>
<managed-bean-name>demo</managed-bean-name>
<managed-bean-class>foo.MyManagedBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>propName</property-name>
<value>#{someExpression}</value>
</managed-property>
</managed-bean>
Map<String, String> parameterMap = (Map<String, String>) externalContext.getRequestParameterMap();
String param = parameterMap.get("paramName");