【问题标题】:h:inputTextarea doesn't work in rich facesh:inputTextarea 不适用于富人脸
【发布时间】:2012-04-05 10:40:19
【问题描述】:

永远不会在 bean 端设置输入 Textarea 值。 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包含在另一个页面中,并作为controller参数获取需要的bean。

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

【问题讨论】:

    标签: java jsf richfaces jsf-1.2


    【解决方案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
        }
    }
    

    【讨论】:

    • 不,事实并非如此——jboss EL 会完成他们的工作。并且在其他部分使用完全相同的代码(reRender 组件除外)并且它可以工作。我的猜测是它有一些其他对象由于某种原因没有转换为字符串。正在调查...
    • 确实,它只适用于另一个类...问题是:为什么? :)
    猜你喜欢
    • 1970-01-01
    • 2019-02-20
    • 2015-10-13
    • 2010-10-22
    • 2018-03-16
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    相关资源
    最近更新 更多