Jsf 如果未调用控件,则在中使用commandButton
我正在使用jsf和Primefaces组件。我需要根据输入值clic命令按钮。这是我的html代码:Jsf 如果未调用控件,则在中使用commandButton,jsf,if-statement,primefaces,Jsf,If Statement,Primefaces,我正在使用jsf和Primefaces组件。我需要根据输入值clic命令按钮。这是我的html代码: <h:form id="mainform"> <p:panel id="panelform" header="Email Extractor" > <h:panelGrid id="formulaire" columns="2"> <h:panelGrou
<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>
标签
中的commandButton总是被调用,而标签
中的commandButton无论我输入9还是15作为数字输入值都不会被调用。
有什么解释和帮助吗?看起来问题出在
c:if
标签上。JSTL标记在视图构建期间进行评估,此时bean值不可用,因此您的mailMB.number
总是小于11。看一看,了解一些细节
一种解决方案是使用带有呈现属性的JSF组件
类似这样的内容:
<h:panelGroup rendered="#{mailMB.number gt 10}">
// first commandButton
</h:panelGroup>
<h:panelGroup rendered="#{mailMB.number lt 11}">
// second commandButton
</h:panelGroup>
//第一命令按钮
//第二命令按钮
应该有效。问题似乎出在c:if
标签上。JSTL标记在视图构建期间进行评估,此时bean值不可用,因此您的mailMB.number
总是小于11。看一看,了解一些细节
一种解决方案是使用带有呈现属性的JSF组件
类似这样的内容:
<h:panelGroup rendered="#{mailMB.number gt 10}">
// first commandButton
</h:panelGroup>
<h:panelGroup rendered="#{mailMB.number lt 11}">
// second commandButton
</h:panelGroup>
//第一命令按钮
//第二命令按钮
应该可以工作。根据注释:不要创建两个按钮,使用一个按钮并从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>
函数showResultPanel(参数){
if(args&&!args.validationFailed){
var$input=jQuery(“输入[id$='Emailsnbr']”);
$input.val()>10?purchase.show():emailsList.show();
}
}
您可能可以将其折叠到oncomplete
属性中,我只是想让它更清楚。根据注释:不要创建两个按钮,使用一个按钮并从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>
函数showResultPanel(参数){
if(args&&!args.validationFailed){
var$input=jQuery(“输入[id$='Emailsnbr']”);
$input.val()>10?purchase.show():emailsList.show();
}
}
您可能可以将其折叠到oncomplete
属性中,我只是想让它更清楚。唯一的区别是oncomplete
属性吗?那么为什么不在其中获取所需的值呢?@mabi yes只有oncomplete属性不同。我没有收到你的建议,你能说清楚吗?唯一的区别是oncomplete
属性吗?那么为什么不在其中获取所需的值呢?@mabi yes只有oncomplete属性不同。我没有得到你的建议,你能说清楚吗?即使使用rendred,它对我也不起作用。它总是得到小于10+1的数值来解释原因,但问题可能用另一种方法解决得更好。即使使用rendred,它对我也不起作用。它总是得到小于10+1的数值来解释原因,但这个问题可能通过另一种方式得到更好的解决?