gpt4 book ai didi

java - :inputTextarea doesn't work in rich faces

转载 作者:行者123 更新时间:2023-12-01 15:27:06 26 4
gpt4 key购买 nike

输入文本区域值永远不会在 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>

在 bean 中:

public void saveData(){
//logic
}

public String getComments(){
return "comments";
}

public void setComments(String comments){
//logic
}

jsf 页面通过 ui:include 包含在另一个页面中,并获取所需的 bean 作为 Controller 参数。

注释是通过 get 方法读取的,但是,setter 永远不会被调用,saveData 函数也不会被调用。相同的 Controller 用于另一个页面上的一些其他数据,并且实际上相同的 saveData 方法效果很好。我想知道为什么 Textarea 值从未设置?

最佳答案

您收到的错误是针对此行的:

<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,那么它在请求中将为空,因此yout表单中的值不会被发送或激活。您可以尝试使您的 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
}
}

关于java - :inputTextarea doesn't work in rich faces,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10027063/

26 4 0
文章推荐: java - 在 标记中指定属性