0

我的 .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);
}

}

我的豆子代码:

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

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

4

3 回答 3

1

<h:inputHidden>意向表单提交添加自定义请求参数。它的目的是在回发中记住已经定义的 bean 属性。要添加自定义请求参数,您应该使用<f:param>命令组件或“plain vanilla” <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 教程。

于 2013-02-12T12:09:16.410 回答
0

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

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

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

于 2013-02-12T08:14:41.050 回答
0

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

于 2013-02-12T08:44:32.197 回答