JSF启用/禁用commandLink取决于在不使用javaScript的情况下填充两个inputText和boolean标志

JSF启用/禁用commandLink取决于在不使用javaScript的情况下填充两个inputText和boolean标志,jsf,primefaces,Jsf,Primefaces,我正在尝试根据多个条件启用/禁用commandLink 开始时,commandLink被禁用。要启用它,我必须单击一个命令按钮,该按钮激活一个布尔标志(该点当前正在工作),并且必须填充两个inputText CommandLink: <p:commandLink id="buttonGuardar" action="#{vinculacionesGestionDetalleController.buttonGuardar}" update="@form" process="@form" s

我正在尝试根据多个条件启用/禁用commandLink

开始时,commandLink被禁用。要启用它,我必须单击一个命令按钮,该按钮激活一个布尔标志(该点当前正在工作),并且必须填充两个inputText

CommandLink:

<p:commandLink id="buttonGuardar" action="#{vinculacionesGestionDetalleController.buttonGuardar}" update="@form" process="@form" styleClass="fa-commandlink fa-floppy-o" immediate="true" disabled="#{vinculacionesGestionDetalleController.flagGuardar and empty vinculacionesGestionDetalleController.vinculacionLaboral.denominacionCas and empty vinculacionesGestionDetalleController.vinculacionLaboral.denominacionVal}">

  <h:outputText value="#{msg.guardar}" />
</p:commandLink>
<p:row>
  <p:column styleClass="alignTextRight">
    <h:outputLabel value="#{msg.vinculaciones_gestion_detalle_denominacionCas}" for="inputDenominacionCas" />
  </p:column>
  <p:column>
    <p:inputText id="inputDenominacionCas" style="width:100%" value="#{vinculacionesGestionDetalleController.vinculacionLaboral.denominacionCas}" />
  </p:column>
</p:row>

<p:row>
  <p:column styleClass="alignTextRight">
    <h:outputLabel value="#{msg.vinculaciones_gestion_detalle_denominacionVal}" for="inputDenominacionVal" />
  </p:column>
  <p:column>
    <p:inputText id="inputDenominacionVal" style="width:100%" value="#{vinculacionesGestionDetalleController.vinculacionLaboral.denominacionVal}" />
  </p:column>
</p:row>

但是它不起作用。

首先,“disabled”属性中的逻辑操作是错误的。据我所知,您希望在标志为true且inputExt不为空时启用链接

enabled="#{flag and not empty inputText1 and not empty inputText2}"
哦,不,commandLink没有启用属性。没问题:

disabled="#{not (flag and not empty inputText1 and not empty inputText2)}"
现在,InputExts值的更改必须触发一个ajax事件,该事件将更新commandLink

<p:row>
  <p:column styleClass="alignTextRight">
    <h:outputLabel value="#{msg.vinculaciones_gestion_detalle_denominacionCas}" for="inputDenominacionCas" />
  </p:column>
  <p:column>
    <p:inputText id="inputDenominacionCas" style="width:100%" value="#{vinculacionesGestionDetalleController.vinculacionLaboral.denominacionCas}" >
        <p:ajax event="keyup" update="buttonGuardar"/> 
    </p:inputText>
  </p:column>
</p:row>

<p:row>
  <p:column styleClass="alignTextRight">
    <h:outputLabel value="#{msg.vinculaciones_gestion_detalle_denominacionVal}" for="inputDenominacionVal" />
  </p:column>
  <p:column>
    <p:inputText id="inputDenominacionVal" style="width:100%" value="#{vinculacionesGestionDetalleController.vinculacionLaboral.denominacionVal}" >
        <p:ajax event="keyup" update="buttonGuardar"/> 
    </p:inputText>
  </p:column>
</p:row>


如果您希望仅在inputText失去焦点时触发ajax事件,则可以使用“模糊”事件而不是“键控”。

当您的“禁用”EL仅用作
h:outputText的值时,是否显示预期值?抱歉@Kikeltje,但是我不明白你的意思是什么,你必须使用ajax监听器来监听inputtext上的更改,然后更新commandLink。你是说?尝试不使用按钮及其标志。查看事件是否工作。即使没有按钮及其标志,也无法工作。可能是“disabled”属性中的语法错误?谢谢。好吧,你必须用你原来的变量替换你原来的变量。你怎么了?是的,我怎么了。但还是不苦…谢谢你!没有什么我也尝试过这个选项:disabled=“#{!(categoriasGestionDetalleController.flagGuardar和!empty InputDenominacos和!empty InputDenominaconval)}”
disabled="#{not (flag and not empty inputText1 and not empty inputText2)}"
<p:row>
  <p:column styleClass="alignTextRight">
    <h:outputLabel value="#{msg.vinculaciones_gestion_detalle_denominacionCas}" for="inputDenominacionCas" />
  </p:column>
  <p:column>
    <p:inputText id="inputDenominacionCas" style="width:100%" value="#{vinculacionesGestionDetalleController.vinculacionLaboral.denominacionCas}" >
        <p:ajax event="keyup" update="buttonGuardar"/> 
    </p:inputText>
  </p:column>
</p:row>

<p:row>
  <p:column styleClass="alignTextRight">
    <h:outputLabel value="#{msg.vinculaciones_gestion_detalle_denominacionVal}" for="inputDenominacionVal" />
  </p:column>
  <p:column>
    <p:inputText id="inputDenominacionVal" style="width:100%" value="#{vinculacionesGestionDetalleController.vinculacionLaboral.denominacionVal}" >
        <p:ajax event="keyup" update="buttonGuardar"/> 
    </p:inputText>
  </p:column>
</p:row>