我在表单中有一个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()}">
没有运气。有什么想法吗?
答案 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
}