我正在使用jsf和Primefaces组件。我需要根据输入值做clic the commandButton。这是我的HTML代码:
<h:form id="mainform">
<p:panel id="panelform" header="Email Extractor" >
<h:panelGrid id="formulaire" columns="2">
<h:panelGroup id="formblock" layout="block" >
<p:panelGrid columns="2">
<p:outputLabel for="Emailsnbr" value="Enter the emails'number:" />
<p:inputText id="Emailsnbr" type="number" requiredMessage="Emails number is required"
value="#{mailMB.number}" required="true" label="Emailsnbr">
</p:inputText>
</p:panelGrid>
</h:panelGroup>
</h:panelGrid>
<c:if test="#{mailMB.number gt 10}">
<p:commandButton value="Extract" style="width: 8%;height: 100%" update="tableemails, :confirmPurchase, :mainform" id="extractbutton" ajax="true" widgetVar="ButtonExtract"
actionListener="#{mailMB.searchEmails()}"
oncomplete="if (args && !args.validationFailed) purchase.show();"/>
</c:if>
<c:if test="#{mailMB.number lt 11}">
<p:commandButton value="Extract" style="width: 8%;height: 100%" update="tableemails, :confirmPurchaseTest, :mainform" id="extractbuttonTest" ajax="true" widgetVar="ButtonExtract"
actionListener="#{mailMB.searchEmails()}"
oncomplete=" if (args && !args.validationFailed) emailsList.show();"/>
</c:if>
</p:dialog>
</p:panel>
</h:form>
始终调用标记<c:if test="#{mailMB.number lt 11}">
中的commandButton,而不是标记<c:if test="#{mailMB.number gt 10}">
中的commandButton,我输入9或15作为数字输入的值。
任何解释和帮助如何使这项工作?
答案 0 :(得分:3)
看起来问题是c:if
标签。在视图构建期间评估JSTL标记,此时bean值不可用,因此mailMB.number
总是小于11。请查看this question以获取有关此内容的详细信息。
一种解决方案是使用一些带有rendered
属性的JSF组件。
这样的事情:
<h:panelGroup rendered="#{mailMB.number gt 10}">
// first commandButton
</h:panelGroup>
<h:panelGroup rendered="#{mailMB.number lt 11}">
// second commandButton
</h:panelGroup>
应该有用。
答案 1 :(得分:1)
根据评论:不要创建两个按钮,使用一个按钮并从javascript本身的页面中获取值:
<p:commandButton value="Extract" style="width: 8%;height: 100%"
update="tableemails, :confirmPurchaseTest, :mainform"
id="extractbutton" ajax="true"
widgetVar="ButtonExtract"
actionListener="#{mailMB.searchEmails()}"
oncomplete="showResultPanel(args);" />
<h:outputScript>
function showResultPanel(args) {
if (args && !args.validationFailed) {
var $input = jQuery("input[id$='Emailsnbr']");
$input.val() > 10 ? purchase.show() : emailsList.show();
}
}
</h:outputScript>
您可以将其折叠到oncomplete
属性中,我只是想让它更清晰。