我一直在和Jquery一起研究JSF2。我有一个使用JSF2填充隐藏字段的问题。我知道可以这样做
<h:inputHidden id="a" value="#{backingBean.a} />
这很好用,但唯一需要的是我需要在我的支持bean中为'a'创建getter和setter。但我想通过传递另一个参数调用一个支持bean方法,这将返回一个必须在'inputHidden'中设置的输出值。我试过像这样使用
<h:inputHidden id="a" value="#{backingBean.populateA(b)} />
但是,这段代码在我的浏览器控制台上发出警告说用法不正确。我理解带有参数的支持bean方法应该在{action'属性中调用,如<h:commandButton>
。如何使用JSF2甚至Jquery为隐藏字段使用某些内容?
请注意,我需要在页面加载时填充此输入隐藏字段。不确定是否可以完成。
感谢您的提前时间。
答案 0 :(得分:1)
使用隐藏的命令按钮将值传递给方法
<h:commandButton value="Print" id="someButton" style="visibility: hidden;"
action="#{backingBean.populateA(b)}">
<f:ajax execute="@this" render="a"/>
</h:commandButton>
和一个用于接收输出的隐藏输入
<h:inputHidden id="a" value="#{backingBean.a} />
在触发所需事件时使用jQuery单击按钮。
答案 1 :(得分:1)
所有旨在充当“价值持有者”的标记,即<h:inputText>
或<h:selectOneMenu>
等标记,都由实现{{3}的UIInput
类备份接口。在应用请求值阶段期间,用户提交的值将从请求参数中提取,并按UIInput#setSubmittedValue
设置为相应组件类的提交值。如有必要,可以使用Converter#getAsObject
预先转换值。
接下来,每个“值持有者”组件都提供value
属性,该属性将组件的值与辅助bean的属性双向绑定。例如,当绑定的格式为value="#{bean.prop}"
时,当需要从bean属性更新组件值并且bean.getProp()
从bean.setProp(value)
派生时调用value
在更新模型值阶段期间更新模型值时从UIInput#getValue()
开始。
总而言之,UIInput
组件需要通过相应JSF标记的value
属性与bean属性进行双向绑定,并且此绑定提供对数据的访问权限。通过值表达式建模。这为我们留下了value="#{bean.prop}"
类型的值绑定。
如果您想要使用直接的用户提交的值填充bean属性,但是通过某种方法修改了值,您基本上会留下以下内容:
EditableValueHolder
并在Converter#getAsObject
和Converter#getAsString
中的bean属性和组件值之间进行一对一映射。不要忘记在转换器中指定转换器,例如标签的converter
属性。作为通常的参考点,您可以参考Converter
; public String getProp(String s) { return modifyPropValue(this.prop); }
和public void setProp(String s) { this.prop = modifyCompValue(s); }
。我会强烈反对这样做; dummyProp
bean属性进行虚拟绑定,并在您的action(侦听器)方法中执行this.prop = modifyCompValue(dummyProp)
。您还可以注意到,具有虚拟属性是多余的,您可以通过FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id")
访问必要的请求参数。实际上,在另一个答案中提出的解决方案是这种转变的一个特例,其中行动方法中唯一的事情是转换价值的人口。