根据条件隐藏JSF标签..!

时间:2016-06-27 10:27:23

标签: jsf jsf-2 managed-bean

我有像这样的JSF文本框

<p:outputLabel value="#{msgs['label.responsible']}:" for="printingResponsibleEdit"
                                rendered="#{b2cOrderDetailBean.b2cActionOrderView.canChangePrintingInfo() and 
                                                   b2cOrderDetailBean.b2cActionOrderView.showExecutionInfo}" />
                            <h:panelGroup id="printresponsible"
                                rendered="#{b2cOrderDetailBean.b2cActionOrderView.canChangePrintingInfo() and 
                                                  b2cOrderDetailBean.b2cActionOrderView.showExecutionInfo}">
                                <p:inputText id="printingResponsibleEdit" value="#{b2cOrderDetailBean.b2cActionOrderView.printingResponsiblePersNr}" size="4"
                                    valueChangeListener="#{b2cOrderDetailBean.changeListenerString}" required="true" immediate="true"
                                    requiredMessage="#{msgs['msg.required']}" binding="#{printingResponsibleBinding}" maxlength="4">
                                <f:attribute name="historyTypeCode" value="PR" /> 
                                </p:inputText>
                                <h:outputText value=" " />
                                <p:commandButton value="#{msgs['button.ok']}" immediate="true" process="printingResponsibleEdit"
                                    actionListener="#{b2cOrderDetailBean.requestPrintingResponsible}" escape="false"
                                    update="printingResponsibleName printingResponsibleEditMsg">
                               <f:attribute name="printingResponsible" value="#{printingResponsibleBinding.localValue}" /> 
                                <f:param name="responsiblePersonName" value="#{b2cOrderDetailBean.b2cActionOrderView.printingResponsiblePersNr}"></f:param>
                                </p:commandButton>
                                <h:outputText id="printingResponsibleName" value=" #{b2cOrderDetailBean.b2cActionOrderView.printingResponsible}" />
                            </h:panelGroup>
                            <p:message id="printingResponsibleEditMsg" for="printingResponsibleEdit" />

我有像这样的托管bean方法

public void requestPrintingResponsible(ActionEvent actionEvent) {
        try {
            b2cActionOrderView.setPrintingResponsible(null);
            b2cActionOrderView.setPrintingResponsibleName(null);
            b2cActionOrderView.setPrintingResponsiblePersNr(null);
            String persNr = (String) actionEvent.getComponent().getAttributes().get("printingResponsible");
            if (persNr != null) {
                Account account = accountDelegate.findByPersNr(persNr, localeView.getLocale());
                b2cActionOrderView.setPrintingResponsible(account.getAccountId());
                b2cActionOrderView.setPrintingResponsibleName(account.getName());
                b2cActionOrderView.setPrintingResponsiblePersNr(account.getPersNr());
                validatedPrintingResponsible = account.getPersNr();

                                } else {
                b2cActionOrderView.setPrintingResponsible(null);
            }
        } catch (NoDataFoundException e) {
            LOG.warn("PersNr not found.", e);
            b2cActionOrderView.setPrintingResponsible(null);
            b2cActionOrderView.setPrintingResponsibleName(null);
            b2cActionOrderView.setPrintingResponsiblePersNr(null);
            MessageUtil.addFacesMessage("msg.notFound", colruyt.giftactionmgmt.util.Constants.MSG_PACKAGE, FacesMessage.SEVERITY_ERROR,
                    false, "form:tabView:printingResponsibleEdit", null);
        }


    }

我的问题是当我输入数据库中的值时,如果我按下确定按钮,则会显示相应的用户名和用户ID,但之后如果我清除文本框中的值并且如果我按下必须填写确定按钮错误消息即将到来,但之前的标签未被清除。 即(用户名,用户ID)。 我已经尝试过很多方法来实现这一点,你们可以帮助我吗

1 个答案:

答案 0 :(得分:0)

您的问题很明显immediate="true"

当您将immediate="true"放在commandButton上时,您只需对JSF说,请跳过表单上的任何验证(包括 printingResponsibleEdit )并处理此操作( requestPrintingResponsible < /强>)

那么,如果您已经跳过JSF生命周期的See More验证阶段,JSF如何验证printingResponsibleEdit并呈现更新的p:message printingResponsibleEditMsg ) / p>

请注意,在按下Ok按钮后,您必须渲染(更新)要更新的每个组件,或者只需将h:panelGroup容器添加到组件并为其提供ID并将其更新为:<p:commandButton ... update='containerId'/>