2017-01-30 5 views
0

Проблема заключается в том, что кнопка команды в моем диалоговом окне не запускает метод действия в контроллере. Нет выходных данных регистратора для примера метода «приветствовать». Может ли кто-нибудь взглянуть на меня и дать мне подсказки? Что я делаю не так?CommandButton in Dialog, содержащий Picklist, не срабатывает метод действий

Мой JSF-страницы:

<!DOCTYPE HTML> 
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:p="http://primefaces.org/ui" xmlns:o="http://omnifaces.org/ui" 
    xmlns:of="http://omnifaces.org/functions"> 

<f:view id="bestellungLieferantView"> 
    <f:metadata> 
     <f:event type="preRenderView" 
      listener="#{camundaTaskForm.startTaskForm()}" /> 
    </f:metadata> 
    <h:head> 
     <title>Paket zusammenstellen</title> 
    </h:head> 
    <h:body> 
     <h:form id="bestellungLieferantForm"> 
      <p:dialog id="komponentenAuswahlDialog" 
       header="Komponenten auswählen" widgetVar="komponentenAuswahlDialog" 
       modal="true" height="auto" width="auto"> 

        <p:pickList id="komponenteAuswahlPickList" 
         value="#{bestellungLieferantController.komponentenDualListModel}" 
         var="komponente" itemLabel="#{komponente.serienNummer}" 
         converter="entityConverter" 
         itemValue="#{komponente}" showSourceFilter="true" 
         showTargetFilter="true"> 
         <f:facet name="sourceCaption">Quelle</f:facet> 
         <f:facet name="targetCaption">Ziel</f:facet> 
        </p:pickList> 

        <p:commandButton process="@this" 
         action="#{bestellungLieferantController.greet}" 
         id="auswahlSpeichern" value="Auswahl speichern" 
         oncomplete="PF('komponentenAuswahlDialog').hide();" /> 
      </p:dialog> 
      <h:panelGrid id="paketInformationPG" columns="2" border="1"> 
       <f:facet name="header"> 
        <h:outputText value="Paket zusammenstellen" /> 
       </f:facet> 
       <h:outputLabel value="Kunde:" /> 
       <h:outputText value="#{processVariables['kunde']}" /> 

       <h:outputLabel value="Betriebssystem:" /> 
       <h:outputText value="Platzhalter" /> 

       <h:outputLabel value="Benutzer:" /> 
       <h:outputText value="#{processVariables['benutzerName']}" /> 
      </h:panelGrid> 
      <h:panelGrid id="komponentenZusammenstellungPG" columns="2" 
       border="1"> 
       <f:facet name="header"> 
        <h:panelGrid columns="2"> 
         <h:outputText value="Komponenten" /> 
         <p:commandButton id="auswahlKomponenteButton" 
          action="#{bestellungLieferantController.createAvailableKomponentDualListModel()}" 
          type="button" onclick="PF('komponentenAuswahlDialog').show();" 
          value="+" /> 
        </h:panelGrid> 
       </f:facet> 
       <p:dataTable id="komponenteTable" widgetVar="komponenteTable" 
        var="komponente" 
        value="#{bestellungLieferantController.komponentenList}"> 
        <p:column> 
         <f:facet name="header">Typ</f:facet> 
         <h:outputText value="#{komponente.produkt.typ.name}" /> 
        </p:column> 

        <p:column> 
         <f:facet name="header">Bezeichnung</f:facet> 
         <h:outputText value="#{komponente.produkt.name}" /> 
        </p:column> 

        <p:column> 
         <f:facet name="header">SN</f:facet> 
         <h:outputText value="#{komponente.serienNummer}" /> 
        </p:column> 

        <p:column headerText="Kaufdatum"> 
         <f:facet name="header">Kaufdatum</f:facet> 
         <h:outputText value="#{komponente.bestellDatum}" /> 
        </p:column> 

        <p:column> 
         <f:facet name="header">Aktion</f:facet> 
         <p:commandLink value="Bearbeiten" /> 
         <p:commandLink value="Enfernen" /> 
        </p:column> 
       </p:dataTable> 
      </h:panelGrid> 
     </h:form> 
    </h:body> 
</f:view> 
</html> 

Мой Bean:

@ManagedBean(name="bestellungLieferantController") 
@SessionScoped 
public class BestellungLieferantController implements Serializable{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 2862985625231368306L; 

    @EJB 
    private BestellungFacade bestellungFacade; 

    @EJB 
    private PaketFacade paketFacade; 

    @EJB 
    private KomponenteFacade komponenteFacade; 

    @EJB 
    private BetriebssystemFacade betriebssystemFacade; 

    // Komponent-List with added komponent items 
    private List<Komponente> komponentenList = new ArrayList<Komponente>(); 

    private DualListModel<Komponente> komponentenDualListModel; 

    private static final Logger logger = Logger.getLogger(BestellungLieferantController.class); 

    public DualListModel<Komponente> getKomponentenDualListModel() { 
     return komponentenDualListModel; 
    } 

    public void setKomponentenDualListModel(DualListModel<Komponente> komponentenDualListModel) { 
     this.komponentenDualListModel = komponentenDualListModel; 
    } 

    public List<Komponente> getKomponentenList() { 
     logger.info("KomponenList-Size: " + this.komponentenList.size()); 
     return komponentenList; 
    } 

    public void setKomponentenList(List<Komponente> komponentenList) { 
     logger.info("Setting a new KomponentenList..."); 
     this.komponentenList = komponentenList; 
    } 

    public void greet(){ 
     logger.info("Greet Method Invoked!"); 
    } 


    /** 
    * Gets the actual Model with the distinct source and 
    * @param targetList 
    * @return 
    */ 
    @PostConstruct 
    public void createAvailableKomponentDualListModel(){ 
     // Logger 

     logger.info("CreateAvailableKomponentDualList invoked!"); 
     List<Komponente> sourceKomponenteList = this.komponenteFacade.getAllAvailableKomponente(); 
     List<Komponente> sourceKomponenteDistinctList = new ArrayList<Komponente>(); 

     if (this.komponentenList.size() != 0){ 
      for(Komponente k : sourceKomponenteList){ 
       if (!komponentenList.contains(k)){ 
        sourceKomponenteDistinctList.add(k); 
       } 
      } 
     } else { 
      sourceKomponenteDistinctList = sourceKomponenteList; 
     } 


//  komponentenDualListModel.setSource(sourceKomponenteDistinctList); 
//  komponentenDualListModel.setTarget(komponentenList); 

     this.setKomponentenDualListModel(new DualListModel<Komponente>()); 
     this.getKomponentenDualListModel().setSource(sourceKomponenteDistinctList); 
     this.getKomponentenDualListModel().setTarget(this.komponentenList); 
    } 

    public void putSelectionIntoKomponenteList(){ 
     logger.info("PutSelectionIntoKomponentList"); 
     logger.info("KOMPONENTELIST: " + komponentenDualListModel.getTarget()); 
     this.komponentenList = this.komponentenDualListModel.getTarget(); 
    } 
} 

Мой конвертер:

@FacesConverter(value = "entityConverter") 
public class EntityConverter implements Converter { 

    // Checking the converter 
    private static final Logger logger = Logger.getLogger(EntityConverter.class); 

    private static Map<Object, String> entities = new WeakHashMap<Object, String>(); 

    @Override 
    public String getAsString(FacesContext context, UIComponent component, Object entity) { 
     synchronized (entities) { 
      logger.info("[Converter] GetAsString: " + ", Class:" + entity.getClass() + ", Component-ID: " + component.getId()); 
      if (!entities.containsKey(entity)) { 
       String uuid = UUID.randomUUID().toString(); 
       entities.put(entity, uuid); 
       return uuid; 
      } else { 
       return entities.get(entity); 
      } 
     } 
    } 

    @Override 
    public Object getAsObject(FacesContext context, UIComponent component, String uuid) { 
     logger.info("[Converter] GetAsString: " + ", UUID:" + uuid + ", Component-ID: " + component.getId()); 
     for (Entry<Object, String> entry : entities.entrySet()) { 
      if (entry.getValue().equals(uuid)) { 
       return entry.getKey(); 
      } 
     } 
     //return uuid; 
     return null; 
    } 
} 
+0

processVariables ['kunde'] и # {processVariables ['benutzerName']} выглядят неправильно, что вы хотите сделать/показать там? – lastresort

+0

Проверьте http://stackoverflow.com/questions/2118656/commandbutton-commandlink-ajax-action-listener-method-not-invoked-or-input-value и посмотрите, есть ли у вас связанная с этим проблема – Kukeltje

+0

@lastresort это впрыскиваемые бобы от двигателя camunda ... Значение компонента будет отображаться ... – LupoZ

ответ

0

вам нужно actionListener атрибут вместо action в вашем p:commandbutton тега. и также используйте @ViewScoped вместо @SessionScoped в своей фонотеке. и добавьте ajax="false" в p:commandButton

+0

Он по-прежнему не работает. То, что работает до того, как я опубликовал, заключается в том, что кнопка способна закрыть окно. – LupoZ

+0

Может ли это быть причиной этого броска в консоль? DEBUG validator: 386 - Не удалось проверить выражение # {processVariables ['pcVorhanden']}, используя проверку бина. Выражение оценивается по карте, списку или массиву. – LupoZ

+0

Да, сначала удалите проверку и попробуйте p: commmandButton, работающую с атрибутом actionListener. – ArgaPK