如何从facelet中获取隐藏的价值?

时间:2013-02-12 08:05:54

标签: java jsf jsf-2

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

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

3 个答案:

答案 0 :(得分:1)

<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教程。

答案 1 :(得分:0)

您确定getApplicationMap()的{​​{1}}部分?当我触摸外部上下文时,它是从请求映射中检索值:

FaceUtil

在您的情况下,Map<String, String> pMap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 应包含密钥pMap

答案 2 :(得分:0)

尝试      (字符串)context.getExternalContext()getRequestParameterMap()得到(参数名称)。; 在你的情况下 parameterName可以是nextFlag或prevFlag