gpt4 book ai didi

java - 在 JSF 中获取请求参数值

转载 作者:IT老高 更新时间:2023-10-28 20:52:06 27 4
gpt4 key购买 nike

我有一个 <odc:tabbedPanel/>零件。在这里面我有一个页面 <odc:bfPanel/>零件。我想从 <odc:bfPanel/> 中的页面访问一个值(输入文本或单选按钮)在我的<odc:tabbedPanel/>托管 bean 类。请指导我如何解决这个问题。请注意,我不想在这里使用 session 。我只希望它在请求中。我尝试了以下选项,但它们对我不起作用。

选项一

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 风格的方式是使用 ExternalContext#getRequestParameterMap() :

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

至于为什么选项 3 不起作用很可能是因为参数名称不是您认为/期望的。 JSF 即基于父 UINamingContainer 预先添加(woodstocks)客户端 ID View 树中的组件。在您的网络浏览器中右键单击生成的 JSF 页面的 HTML 输出并选择查看源代码。检查生成的名称<input>感兴趣的元素。使用 that 名称代替参数名称。


也就是说,这毕竟是一种解决方法而不是解决方案。但是我们不能合理地建议 real 解决方案,因为您的功能要求和代码并不完全清楚。您通常将输入元素绑定(bind)到支持 bean。如果您实际上在不同的支持 bean 中,那么您也可以从支持 bean 内部访问 那个 支持 bean,然后依次访问与其绑定(bind)的输入值。见 Injecting Managed Beans in each other了解如何做。

关于java - 在 JSF 中获取请求参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3351348/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com