我有一个primefaces对话框,我想要做的是在commandbutton动作开始之前处理inputtext。在myController.sendToPostBox方法中,myController.rejectionReason字符串返回null。这是我的视图代码。当我删除进程属性时,commandbutton不起作用。
<h:form>
....
<p:dialog id="myPanel"
widgetVar="myPanelId"
resizable="true"
appendToBody="true"
draggable="true"
height="200"
width="300">
<p:panelGrid id="myPanelGridId" style="width: 250px;" styleClass="panelGridWithoutBorder">
<p:row>
<p:column colspan="2">
<p:inputTextarea style="width: 250px;" value="#{myController.rejectionReason}"/>
</p:column>
</p:row>
<p:row>
<p:column>
<p:commandButton value="Save"
oncomplete="if (!args.validationFailed) myPanel.hide();"
process="myPanelId"
action="#{myController.sendToPostBox()}"/>
</p:column>
<p:column>
<p:commandButton value="Close" />
</p:column>
</p:row>
</p:panelGrid>
</p:dialog>
</h:form>
答案 0 :(得分:2)
只需将<h:form>
放在对话框内(而不是<h:form>
内的对话框)
说明:
当你使用appendToBody="true"
时,你的对话框正在转移在表格之外将其包装到生成的html的正文中,并且由于对话框中没有任何表格你可以'真的提交它。
答案 1 :(得分:0)
你需要这样的东西:
<h:form id="formDialog">
<p:commandButton id="basic" value="Basic Dialog" onclick="PF('dlg1').show();" type="button" />
</h:form>
<p:dialog id="basicDialog" header="Basic Dialog" widgetVar="dlg1">
<h:form id="formUser">
<h:panelGrid id="grid" columns="2">
<h:outputLabel value="Username:" />
<p:inputText id="user" value="#{user.name}" />
<h:outputLabel value="Password:" />
<p:inputText id="password" value="#{user.password}" />
<h:commandButton value="Login" id="btn" process="@formUser" actionListener="#{user.login}" />
</h:panelGrid>
</h:form>
</p:dialog>
actionListener标记中的“login”是User(bean)类中的一个方法,需要@ManagedBean注释。