【问题标题】:How can I get hidden value from facelet?如何从 facelet 获得隐藏的价值?
【发布时间】:2013-02-12 08:05:53
【问题描述】:

我的 .xhtml 页面中有一些隐藏字段。

<h:inputHidden value="1" id="hidePrev"/>
.....
<h:inputHidden value="1" id="hideNext"/>

我无法从我的 JSF bean 中获取它们的值。

public class FacesUtil {
public static Object getMapValue(String key) {
    return FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().get(key);
}

public static void setMapValue(String key, Object value) {
    FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().put(key, value);
}

}

我的 bean 代码:

    nextFlag = (String)FacesUtil.getMapValue("hideNext");
    prevFlag = (String)FacesUtil.getMapValue("hidePrev");

nextFlagprevFlag 字段仍为空。他们有 getter 和 setter 方法。我正在使用 JSF 2.2 版本。请帮我解决这个问题。

【问题讨论】:

    标签: java jsf jsf-2


    【解决方案1】:

    &lt;h:inputHidden&gt; 无意向表单提交添加自定义请求参数。它的目的是在回发中记住已经定义的 bean 属性。要添加自定义请求参数,您应该在命令组件中使用&lt;f:param&gt; 或“plain vanilla”&lt;input type="hidden"&gt;

    所以,所以

    <h:commandButton ...>
        <f:param name="prev" value="1" />
        <f:param name="next" value="1" />
    </h:commandButton>
    

    差不多

    <input type="hidden" name="prev" value="1" />
    <input type="hidden" name="next" value="1" />
    <h:commandButton ... />
    

    无论哪种方式,值都在请求范围的 bean 中,可用作

    @ManagedProperty("#{param.prev}")
    private String prev;
    
    @ManagedProperty("#{param.next}")
    private String next;
    

    或者在更广泛的bean中作为

    String prev = externalContext.getRequestParameterMap().get("prev");
    String next = externalContext.getRequestParameterMap().get("next");
    

    请注意,您将请求参数与应用程序范围的属性混淆了。这真的是一个相当大的混淆,它证明你不知道你在做什么。我强烈建议暂停一下,再重新阅读一次基本的 JSF 教程。

    【讨论】:

    • 这对我很有帮助。谢谢。
    【解决方案2】:

    您确定FaceUtilgetApplicationMap() 部分吗?当我触摸外部上下文时,它是从请求映射中检索值:

    Map<String, String> pMap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
    

    在您的情况下,pMap 应该包含一个密钥 hideNext

    【讨论】:

    • 我试过了: Map pMap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); nextFlag = pMap.get("hideNext"); prevFlag = pMap.get("hidePrev");但它处于闲置状态。
    • “空闲”是什么意思?从地图中获取 nextFlag 和 prevFlag 变量后是否仍为空?
    • 奇怪,你能看看浏览器的请求中发送了什么(使用像 Firebug 这样的工具)吗?浏览器是否提交了这些值?随便看看:这些输入字段是否包含在
      中?
    【解决方案3】:

    试试 (String)context.getExternalContext().getRequestParameterMap().get(parameterName); 在你的情况下 parameterName 可以是 nextFlag 或 prevFlag

    【讨论】:

    • 它也不起作用:(我试过 nextFlag = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("hideNext"); prevFlag = FacesContext.getCurrentInstance().getExternalContext ().getRequestParameterMap().get("hidePrev");
    • 使用firebug inspect element在浏览器上渲染jsf页面时检查是否打印hidePrev或hideNext的值
    猜你喜欢
    • 2011-11-07
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    相关资源
    最近更新 更多