Dialog中的InputTextarea不应该处理,但确实如此

时间:2017-03-03 11:18:51

标签: jsf primefaces

我在对话框中有一个inputTextArea,并希望在用户点击取消按钮时不应发送/更改bean属性,但确实如此。

<form name="contactform" method="post" action="send_form_email.php">
    <div class="controls">
        <input type="text" name="first_name" placeholder="Name" id="name" required data-validation-required-message="Please enter your name" />
    </div>
    <div class="controls">
        <input type="email" placeholder="Email" name="email" id="email" required data-validation-required-message="Please enter your email address" />
    </div>
    <div class="controls">
        <input type="tel" placeholder="Phone" name="phone" id="phone" required data-validation-required-message="Please enter your phone number" />
    </div>
    <div class="controls">
        <textarea name="comments" rows="5" cols="100" placeholder="Message" id="message" required data-validation-required-message="Please enter your message" maxlength="999" style="resize:none"></textarea>
    </div>
    <button type="submit" class="btn-primary submit">SEND!<i class="fa fa-paper-plane sub"></i></button>

</form>

打开对话框的按钮:

<p:dialog header="Notizen" id="paketNotizenDialog" modal="true"
            widgetVar="paketNotizenDialogWV">
            <h:form>
                <p:panelGrid columns="1">
                    <p:inputTextarea  scrollHeight="200" rows="6" cols="33" autoResize="false"
                        value="#{paketErstellenDialogController.selectedPaket.notiz}" />
                </p:panelGrid>
                <p:commandButton value="Save" process="@form" oncomplete="PF('paketNotizenDialogWV').hide();"/>

                <p:commandButton value="Cancel" oncomplete="PF('paketNotizenDialogWV').hide();" process="@none" update="@none" />
            </h:form>
        </p:dialog>

任何提示?提前谢谢。

2 个答案:

答案 0 :(得分:2)

当您使用commandButton时,默认行为是提交带有ajax请求的封闭表单。

我怀疑你想要做的是重置表单输入并关闭对话框。在这种情况下,你应该根据primefaces doc:

去找type="reset"
  

重置按钮不提交表单,只需重置表单内容。

完成后,触发关闭的javascript代码:

<p:commandButton value="Cancel" type="reset" 
      onclick="PF('paketNotizenDialogWV').hide();"/>

如果您不想重置表单,只需关闭对话框,然后使用:

<p:commandButton value="Cancel" type="button" 
    onclick="PF('paketNotizenDialogWV').hide();"/>

根据primefaces doc的说法:

  

按钮用于执行自定义javascript而不会导致   ajax / non-ajax请求。要创建按钮设置类型为“按钮”

<强>更新

如果要重置辅助bean中的值,请使用primefaces的reset input fields功能。

在你的情况下,它会是这样的:

<p:panelGrid columns="1">
       <p:inputTextarea  id="input" scrollHeight="200" rows="6" cols="33" autoResize="false"
              value="#{paketErstellenDialogController.selectedPaket.notiz}" />
</p:panelGrid>

<p:commandButton value="Cancel" oncomplete="PF('paketNotizenDialogWV').hide();" 
     process="@this" update="input" >
    <p:resetInput target="input" />
</p:commandButton>

答案 1 :(得分:0)

只需添加type="button"并移除process="@none" update="@none" 来自<p:commandButton value="Cancel" oncomplete="PF('paketNotizenDialogWV').hide();" process="@none" update="@none" />