如何从facelet中获得隐藏的价值

  • 本文关键字:隐藏 facelet java jsf jsf-2
  • 更新时间 :
  • 英文 :


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

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

而且我无法从JSFbean中获取它们的值。

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版本。请帮我解决这个问题。

<h:inputHidden>并不打算向表单提交添加自定义请求参数。它旨在记住回发中已经定义的bean属性。要添加自定义请求参数,您应该在命令组件中使用<f:param>或"普通"<input type="hidden">

因此,

<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的基本教程。

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

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

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

尝试(String)context.getExternalContext().getRequestParameterMap().get(parameterName);就你而言parameterName可以是nextFlag或prevFlag

相关内容

  • 没有找到相关文章

最新更新