inputHidden如何从backbean获取值

时间:2014-02-26 12:08:20

标签: jsf jsf-2 el hidden-field

我在表单中有一个inputHidden元素,我想从backbean获取属性值。这是我的JSF代码:

<h:form id="imageEditor">
    <p:toolbar id="theMenuBar">
            <p:toolbarGroup align="left">
            ...
                <p:commandButton value="Quit" ajax="true"
                    action="#{imageEditorBean.goToMainMenu()}"
                    icon="ui-icon-close" >
                    <p:ajax update="@this" immediate="true"/>
                </p:commandButton>
        </p:toolbarGroup>
    </p:toolbar>
    ...  
    <p:fieldset id="viewer" legend="Viewer">    
        <h:inputHidden id="getJSONData" value="#{imageAnnotations.fetchJSONString()}">
        </h:inputHidden>
    ...

我对应的backbean类是:

@ManagedBean(name="imageAnnotations")
public class ImageAnnotations  {

    private String jsonString;

    public String fetchJSONString () {

        jsonString = new String();
        ...//populate property
        return jsonString;
    }

    public String getJsonString() {
        return jsonString;
    }

    public void setJsonString(String jsonString) {
       this.jsonString = jsonString;
    }

当页面加载值inputHidden字段的属性被填充但是当我按退出按钮切换视图按钮不起​​作用时,我得到以下错误:

Caused by: javax.el.PropertyNotWritableException: /views/image-editor.xhtml @110,82 value="#{imageAnnotations.fetchJSONString()}": Illegal Syntax for Set Operation

我还尝试调用我的backbean类并填充jsonString属性,如:

<h:inputHidden id="getJSONData" value="#{imageAnnotations.jsonString" action="#{imageAnnotations.fetchJSONString()}">
没有运气。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

inputHidden与inputText的工作方式相同,只是它没有显示在屏幕上。因此,value属性必须指向托管bean中的属性,使用getter和setter。它不能指向一种方法。您必须在构造函数或@PostConstruct中初始化属性的值。如果要使用@ManagedProperty或@EJB填充此属性,则必须在@PostConstruct中执行此操作,因为在构造函数中它们尚未设置。

<h:inputHidden id="getJSONData" value="#{imageAnnotations.jsonString" >

在ManagedBean中

@ManagedBean(name="imageAnnotations")
public class ImageAnnotations  {

    private String jsonString;

    @PostConstruct
    public void init() {
           jsonString = ... // populate jsonString
    }

    // getter & setter for jsonString
}