输入Textarea值永远不会在bean端设置。 JSF 1.2与RichaFaces 3.3.3。有下一个代码:
<h:form id="name" rendered="#{not empty controller}">
<h:panelGrid columns="1" styleClass="medium" columnClasses="subtitle,medium" style="text-align: left;" cellspacing="3px">
<f:facet name="header">
<h:outputText value="Comments"/>
</f:facet>
<h:inputTextarea value="#{controller.comments}" rows="10" cols="80"
immediate="true"></h:inputTextarea>
<div align="right">
<a4j:commandButton value="#{msg['label.save']}" action="#{controller.saveData()}" reRender="name" />
</div>
</h:panelGrid>
</h:form>
在豆子里:
public void saveData(){
//logic
}
public String getComments(){
return "comments";
}
public void setComments(String comments){
//logic
}
jsf页面通过ui包含在另一个页面中:include并获取所需的bean作为 controller 参数。
注释是通过get方法读取的,但是,从不调用setter,也不是 saveData 函数。同一个控制器用于另一个页面上的其他一些数据,实际上相同的 saveData 方法效果很好。我想知道为什么Textarea值永远不会被设定?
答案 0 :(得分:1)
您获得的错误就是这一行:
<a4j:commandButton value="#{msg['label.save']}"
action="#{controller.saveData()}" reRender="name" />
在JSF1.2中,不应在动作中使用括号。改变它
<a4j:commandButton value="#{msg['label.save']}"
action="#{controller.saveData}" reRender="name" />
另外,请在调用时检查您发布的页面是否在其他表单中。
更新:
根据您的上一条评论,我猜您的问题可能出现在这句话中:
<h:form id="name" rendered="#{not empty controller}">
如果controller
是请求bean,那么它在请求中将为空,因此您的表单中的值将不会被发送或激活。您可以尝试将bean保留为请求范围,并为您的bean类添加@KeepAlive批注:
@KeepAlive(ajaxOnly=false)
public class ControllerBean {
//your bean logic...
public void saveData(){
//logic
}
public String getComments(){
return "comments";
}
public void setComments(String comments){
//logic
}
}