p:inputTextarea返回空字符串

时间:2016-05-13 06:53:00

标签: jsf primefaces

我有一个p:inputTextarea,我在处理表单时需要它的值。事实证明,每次我提交表单时,我都会获得除textarea之外的所有值。 #{xyzUI.description}是一个带有常规getter和setter的String对象。

<ui:composition>
    <h:form id="form1">
        <p:panel rendered="...">
            <p:panel id="formPanel">
                <p:panelGrid columns="2" cellpadding="5">
                    <!-- other form elements -->
                    <p:outputLabel>Description:</p:outputLabel>
                    <p:inputTextarea value="#{xyzUI.description}" style="width: 350px;" counter="display" counterTemplate="{0} characters remaining" maxlength="2000" autoResize="true" rows="4" />
                    <h:panelGroup />
                    <h:outputText id="display" />
                </p:panelGrid>
                <p:commandButton rendered="#{not xyzUI.noChange}" action="#{xyzUI.submitForm}" update="formPanel" ajax="true" value="Apply" >
                    <p:ajax update="formPanel"></p:ajax>
                </p:commandButton>
            </p:panel>
        </p:panel>
    </h:form>
<ui:composition>

在我的支持bean中,值始终为“”。我不知道出了什么问题。

public void submitForm()
{
    ...
    tmp.setDescription(description); // String is always "" while debugging
    myList.add(tmp);
    RequestContext.getCurrentInstance().update("content");
}

1 个答案:

答案 0 :(得分:1)

我在本地运行您的代码并发现了问题。在命令按钮中,删除p:ajax调用。

PrimeFaces命令按钮默认启用ajax。

所以改变这个:

<p:commandButton rendered="#{not xyzUI.noChange}" action="#{xyzUI.submitForm}" update="formPanel" ajax="true" value="Apply" >
  <p:ajax update="formPanel"></p:ajax>
</p:commandButton>

对此:

 <p:commandButton rendered="#{not xyzUI.noChange}" action="#{xyzUI.submitForm}" update="formPanel" value="Apply" />

我的支持bean供参考

@ManagedBean
@ViewScoped
public class xyzUI implements Serializable{

    private static final long serialVersionUID = 6259024062406526022L;

    private String description;
    private boolean noChange = false;

    public xyzUI(){

    }

    public void submitForm(){
        System.out.println(description);
    }

    public boolean isNoChange() {
        return noChange;
    }

    public void setNoChange(boolean noChange) {
        this.noChange = noChange;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

}