为什么我的InputTextArea返回null?

时间:2013-10-08 18:24:29

标签: jsf primefaces

我的xhtml,如果我将CommandButton放入h:form,则Actionlistener未被调用:

<ui:composition template="/template.xhtml">
    <style>

    </style>
    <ui:define name="title">
        <h:outputText value="#{bundle.ListDashboardTitle}"></h:outputText>
    </ui:define>
    <ui:define name="body">
        <h:form id="formDashboard">
            <p:layout id="layoutVar" style="min-height:500px;">
                <p:layoutUnit id="gridLeft" position="west" size="250" style="position:absolute;">
                    <p:fieldset style="padding:0;padding-top:5px">
                        <f:facet name="legend" id="legendId">
                            <p:commandButton id="addEvent" type="button" icon="ui-icon-plus" value=""  onclick="addMemo.show()" update=":formAddMemo" style="width:30px;height:30px;"/>
                        </f:facet>
                        <p:dataGrid id="leftData" var="item" columns="1" value="#{myMemosController.items}" style="border:none;">
                            <p:panel id="pnl" styleClass="" style="background-color:#{item.priority}}" closable="true">
<!--                                <p:ajax event="close" listener=""/>-->
                                <f:facet name="header">
                                    <h:panelGroup>
                                        <h:outputText value="#{item.name}" styleClass=""/>
                                        <p:commandButton icon="ui-icon-pencil" actionListener="#{myMemosController.prepareEdit}" update=":editForm" onclick="editMemo.show();" style="width:19px;height:19px;"/>
                                    </h:panelGroup>
                                </f:facet>
                                <f:facet name="footer">
                                    <h:outputText value="#{item.date} at #{item.time}" styleClass="footerStyle"/>
                                </f:facet>
                                <h:panelGrid columns="1" style="width:100%">  
                                    <h:outputText value="#{item.comments}" styleClass=""/>
                                </h:panelGrid>
                            </p:panel>
                            <p:draggable for="pnl" helper="clone" handle=".ui-panel-titlebar" stack=".ui-panel" zindex="100"/>
                        </p:dataGrid>
                    </p:fieldset>
                </p:layoutUnit>

                <p:layoutUnit position="center" style="position:absolute;">
                    <p:outputPanel id="dropArea">
                        <p:dataTable id="centerGrid" value="#{dashboardController.items}" var="item">
                            <p:column style="text-align:center;">
                                <f:facet name="header">
                                    <h:outputText value="Priority"/>
                                </f:facet>
                                <h:outputText value="#{item.priorityname}"/>
                            </p:column>
                            <p:column style="text-align:center;">
                                <f:facet name="header">
                                    <h:outputText value="Name"/>
                                </f:facet>
                                <h:outputText value="#{item.name}"/>
                            </p:column>
                            <p:column style="text-align:center;">
                                <f:facet name="header">
                                    <h:outputText value="Comment"/>
                                </f:facet>
                                <h:outputText value="#{item.comments}"/>
                            </p:column>
                            <p:column style="text-align:center;">
                                <f:facet name="header">
                                    <h:outputText value="Time"/>
                                </f:facet>
                                <h:outputText value="#{item.time}"/>
                            </p:column>
                            <p:column style="text-align:center;">
                                <f:facet name="header">
                                    <h:outputText value="Date"/>
                                </f:facet>
                                <h:outputText value="#{item.date}"/>
                            </p:column>
                        </p:dataTable>
                    </p:outputPanel>
                    <p:droppable id="droppablePanel" tolerance="touch" activeStyleClass="ui-state-highlight">  

                    </p:droppable>
                </p:layoutUnit>

                <p:layoutUnit id="gridRight" position="east" size="250" style="position:absolute;">
                    <p:dataGrid id="rightGrid" var="item" columns="1" value="#{usersMemosController.items}">
                        <p:panel id="pnl" styleClass="" style="background-color:#{item.priority}}" closable="true">

                            <f:facet name="header">
                                <h:outputText value="#{item.name}" styleClass=""/>
                            </f:facet>
                            <f:facet name="footer">
                                <h:outputText value="#{item.date} at #{item.time}" styleClass="footerStyle"/>
                            </f:facet>
                            <h:panelGrid columns="1" style="width:100%">  
                                <h:outputText value="#{item.comments}" styleClass=""/>
                            </h:panelGrid>
                        </p:panel>
                        <p:draggable for="pnl" helper="clone" handle=".ui-panel-titlebar" stack=".ui-panel" zindex="100"/>
                    </p:dataGrid>
                </p:layoutUnit>
            </p:layout>
        </h:form>

        <p:dialog id="dialogEditMemo" header="Edit Memo" widgetVar="editMemo" resizable="false" closable="true" closeOnEscape="true" draggable="false">
            <h:form id="editForm">
                <h:messages style="color:red;margin:8px;" />

                <h:panelGrid columns="1" cellpadding="3">
                    <p:inputTextarea id="commentEditInput" value="#{myMemosController.currentComment}" rows="6" required="true">
                        <p:ajax event="keyup" />
                        <p:ajax event="change" />
                    </p:inputTextarea>
                    <p:watermark for="commentEditInput" value="Enter your memo..."/>

                    <h:panelGrid columns="2" cellpadding="1">
                        <h:outputLabel for="selectEditShare" value="Share Memo: " style="margin-right:40px;"/>  
                        <p:selectBooleanCheckbox id="selectEditShare" label="selectEditShare"/> 
                    </h:panelGrid>

                    <p:selectOneMenu id="chooseEditPriority" value="#{myMemosController.currentPriority}">  
                        <f:selectItem itemLabel="Low Priority" itemValue="Low Priority" />  
                        <f:selectItem itemLabel="Medium Priority" itemValue="Medium Priority" />  
                        <f:selectItem itemLabel="High Priority" itemValue="High Priority" />  
                    </p:selectOneMenu>
                </h:panelGrid>
            </h:form>
            <p:panel id="panelEditBtn" style="border:none;">
                <p:commandButton icon="ui-icon-close" value="Reset" type="reset"/>
                <p:commandButton icon="ui-icon-check" actionListener="#{myMemosController.update}" value="Edit" process="@this" update=":formDashboard:leftData" onsuccess="editMemo.hide();"/>
            </p:panel>
        </p:dialog>
    </ui:define>
</ui:composition>

当我想显示InputTextarea时,值等于null:

public String update() {
  System.out.println(getCurrentComment());
}

提前致谢

2 个答案:

答案 0 :(得分:1)

问题在于您的managedBean中没有实现对象currentComment。 并且请尽量避免在您的应用程序中使用嵌套表单。

答案 1 :(得分:0)

我遇到了同样的问题,问题是ajax没有将某个值设置为managedBean。因此,请使用下面的代码修改您的<p:inputTextArea />

<p:inputTextarea id="commentEditInput"
  value="#{myMemosController.currentComment}"rows="6" required="true">
   <p:ajax event="keyup" />
   <p:ajax event="change" />
</p:inputTextarea>

对于你的actionListener,只是尝试使用可能有效的进程属性..

<p:commandButton id="submitEditDialog" icon="ui-icon-check" 
  actionListener="#{myMemosController.update}" value="Edit"
  update=":formDashboard:leftData :editForm" onsuccess="editMemo.hide();"
  process="@this"
/>