za pomocą f: viewParam z wymaganym atrybutem i poleceniami

Chcę podzielić się swoimi doświadczeniami za pomocą primefaces, f: viewParam i p: commandButton, i zadać kilka pytań. Spójrz na tę stronę:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui">
  <h:head></h:head>
  <h:body>  
    <f:metadata>
      <f:viewParam required="true" name="id_file" value="#{bean.idFile}" />
    </f:metadata>
    <h:form id="tableform" prependId="false">              
      <p:commandButton actionListener="#{bean.myMethod())}" icon="ui-icon-search" title="View" />
    </h:form>
    <p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" />      
  </h:body>
</html>

Fasola bazowa ma metodę „myMethod ()”, która nic nie robi. Po wejściu na stronę oczekuje parametru „id_file” i umieszcza go we właściwości idFile komponentu bean. Następnie kliknij przycisk, a myMethod zostanie wywołany. Następnie kliknij ponownie i pojawi się niejasny błąd sprawdzania poprawności, a myMethod nigdy nie będzie nazywany:

j_idt1: Validation Error: Value is required.j_idt1: Validation Error: Value is required.

Przede wszystkim pamiętaj, że bez p: wiadomości nie widzisz tego komunikatu, musisz wykopać XML, który primefaces wysyła na wywołania ajax. Po drugie, po 4 godzinach debugowania próbowałem zmienić f: viewParam tak:

<f:viewParam name="id_file" value="#{bean.idFile}" />

bez „wymaganego”: magicznie wszystko zaczyna działać, mogę kliknąć 1,2,3, itd., a myMethod jest wywoływany za każdym razem. Tak więc problem polega na tym, że ajax wysyła poprawność parametru określonego za pomocą f: viewParam, brzmi to dla mnie głupio, ale ok, mogę z tym żyć.

Moje pytania to:

dlaczego ten błąd sprawdzania poprawności nie pojawia się po kliknięciu przycisku po raz pierwszy? Jeśli spojrzysz na ajax POST, są one identyczne

powinno być ok, aby sprawdzić poprawność parametrów widoku (które, według mnie, należy do widoku) w częściowym wywołaniu ajax?

czy istnieje sposób, aby powiedzieć primefaces, aby nie sprawdzał poprawności na określonym żądaniu ajax (process = "@ this" nie rozwiązuje)?

Dziękuję, mam nadzieję, że moje doświadczenie pozwoli ci uniknąć spędzania godzin na debugowaniu!

questionAnswers(1)

yourAnswerToTheQuestion