# Primefaces COmmandBUtton



## moessi91 (20. Mrz 2011)

Hallo, 
ich versuche gerade eine Seite mit Primefaces zu machen, jedoch habe ich bei dem Command Button ein Problem. Es sollen daten eingegeben werden und dann in einem Table angezeigt. 
Der Button funktioniert dabei leider nicht.

```
<h:form prependId="false">
                <p:panel header="Neues Zimmer">
                    <h:panelGrid columns="2">
                        <h:outputLabel value="Name :" for="sName"></h:outputLabel>
                        <p:inputText id="sName"
                                     value="#{testbean.zimmer.sName}" required="true"/>

                        <h:outputLabel value="Doppelbelegung Preis/Person: " for="lfDoppelPreis"></h:outputLabel>
                        <p:inputText id="lfDoppelPreis"
                                     value="#{testbean.zimmer.lfDoppelPreis}" required="true"/>

                        <h:outputLabel value="Einzelbelegung Preis/Person: " for="lfEinzelPreis"></h:outputLabel>
                        <p:inputText id="lfEinzelPreis"
                                     value="#{testbean.zimmer.lfEinzelPreis}" required="true"/>

                        <h:outputLabel value="Anzahl der möglichen Zusatzbetten:" for="iZusatzbetten"></h:outputLabel>
                        <p:inputText id="iZusatzbetten"
                                     value="#{testbean.zimmer.iZusatzbetten}" required="true"></p:inputText>

                        <h:outputLabel value="Preis pro Zusatzbett:" for="lfZusatzbettenPreis"></h:outputLabel>
                        <p:inputText id="lfZusatzbettenPreis"
                                     value="#{testbean.zimmer.lfZusatzbettenPreis}" required="true"></p:inputText>

                        <h:outputLabel value="Info:" for="sInfos"></h:outputLabel>
                        <p:inputTextarea id="sInfos" value="#{testbean.zimmer.sInfos}" required="true"></p:inputTextarea>
                        
                        <p:commandButton value="Add"
                                         action="#{testbean.add}" update="array" />
                        
                        <p:ajaxStatus style="width:16px;height:16px;">
                            <f:facet name="start">
                                <h:graphicImage value="images/ajax-loader.gif" />
                            </f:facet>

                            <f:facet name="complete">
                                <h:outputText value="" />
                            </f:facet>
                        </p:ajaxStatus>
                    </h:panelGrid>
                </p:panel>

                <p:dataTable id="array" value="#{testbean.array}" var="zimmer">
                 
                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="Name" />
                        </f:facet>
                        <h:outputText value="#{zimmer.sName}" />
                    </p:column>

                </p:dataTable>
                
            </h:form>
```
Der Button funktioniert einfach nicht, also er wird gar nicht ausgeführt wenn ich drauf Klicke. 
Man sieht zwar kurz das AJAX gif aber mehr nicht. 
so sieht die bean dazu aus:

```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import factory.ClassFactory;
import information.or_mapping.Kunde;
import information.or_mapping.Zimmer;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

/**
 *
 * @author CTK
 */
@ManagedBean
@RequestScoped
public class testbean
{
   
    private List<Zimmer> array = new ArrayList<Zimmer>();
    private Zimmer zimmer = new Zimmer();
    
    /** Creates a new instance of testbean */
    public testbean() 
    {
        zimmer.setsName("Test");
        array.add(zimmer);
    }
    public void penis()
    {
        Kunde k = ClassFactory.getKunde(-1);
        k.setId(71);
        k.load();
        System.out.println(k.toString());
    }

    /**
     * @return the zimmer
     */
    public Zimmer getZimmer() {
        return zimmer;
    }

    /**
     * @param zimmer the zimmer to set
     */
    public void setZimmer(Zimmer zimmer) {
        this.zimmer = zimmer;
    }
    public String add()
    {
        System.out.println("tests");
        getArray().add(zimmer);
        zimmer = new Zimmer();
        return null;
    }

    /**
     * @return the array
     */
    public List<Zimmer> getArray() {
        return array;
    }

    /**
     * @param array the array to set
     */
    public void setArray(ArrayList<Zimmer> array) {
        this.array = array;
    }
    
}
```


----------



## freez (21. Mrz 2011)

versuch mal 
	
	
	
	





```
update=":array"
```


----------



## moessi91 (21. Mrz 2011)

Geht leider nicht  
aber es wird nichtmal die funktion add aufgerufen da das system.out auch nicht ausgeführt wird.


----------



## Nogothrim (21. Mrz 2011)

ich glaube, dass liegt am Scope der ManagedBean. bei einer RequestScoped bean stirbt deine Liste ja ganz schnell wieder und deswegen ist sie beim update auch immer leer.


----------



## jwiesmann (21. Mrz 2011)

Versuch mal deine Bean großzuschreiben. Oder gib den Namen mit an.

```
@ManagedBean(name="testbean")
@RequestScoped
public class Testbean
{
```
P.S. cooler Funktionsname _penis_ .. musste ich doch tatsächlich schmunzeln :lol:


----------



## moessi91 (22. Mrz 2011)

habe jetzt den namen hinzugeschrieben und auch mal auf application gesetzt. 
funktioniert beides nicht. 
ich poste mal eben die ganze seite.

```
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
      xmlns:f="http://java.sun.com/jsf/core">

    <h:head>
        <link rel="stylesheet" type="text/css" href="stylesheet.css" />

        <title>Hotelverwaltung</title>
    </h:head>

    <body background="images/background.jpg">
        <h:form styleClass=".ui-stack">
            <p:stack icon="/images/stack/stack.png" widgetVar="stack" id="stack" openSpeed="100" >
                <p:menuitem value="Terminal" icon="/images/stack/coda.png" onclick="TerminalDialog.show();term.focus()"/>
            </p:stack>
            <p:draggable for="stack"/>
            <p:dock>
                <p:menuitem value="Kalender" icon="/images/dock/kalender.png" onclick="KalenderDialog.show();text.focus()"/>
                <p:menuitem value="Zimmer" icon="/images/dock/zimmer.png" onclick="ZimmerDialog.show();zimmer.focus()"/>
                <p:menuitem value="Kunden" icon="/images/dock/kunden.png" onclick="KundenDialog.show();"/>
                <p:menuitem value="Hinzufuegen.." icon="/images/dock/hinzufuegen.png" onclick="HinzuDialog.show();"/>
            </p:dock>



        <p:dialog header="Kalender" widgetVar="KalenderDialog">
        

        </p:dialog>

        <p:dialog header="Zimmer" widgetVar="ZimmerDialog">
        </p:dialog>

        <p:dialog height="450" width="600" widgetVar="TerminalDialog" header="Terminal">
            <p:terminal commandHandler="#{terminalController.handleCommand}"
                        widgetVar="term"
                        id="Terminal"/>
        </p:dialog>

        <p:dialog header="Hinzufügen.." widgetVar="HinzuDialog">
            <h:form prependId="false">
                <p:panel header="Neues Zimmer">
                    <h:panelGrid columns="2">
                        <h:outputLabel value="Name :" for="sName"></h:outputLabel>
                        <p:inputText id="sName"
                                     value="#{testbean.zimmer.sName}" required="true"/>

                        <h:outputLabel value="Doppelbelegung Preis/Person: " for="lfDoppelPreis"></h:outputLabel>
                        <p:inputText id="lfDoppelPreis"
                                     value="#{testbean.zimmer.lfDoppelPreis}" required="true"/>

                        <h:outputLabel value="Einzelbelegung Preis/Person: " for="lfEinzelPreis"></h:outputLabel>
                        <p:inputText id="lfEinzelPreis"
                                     value="#{testbean.zimmer.lfEinzelPreis}" required="true"/>

                        <h:outputLabel value="Anzahl der möglichen Zusatzbetten:" for="iZusatzbetten"></h:outputLabel>
                        <p:inputText id="iZusatzbetten"
                                     value="#{testbean.zimmer.iZusatzbetten}" required="true"></p:inputText>

                        <h:outputLabel value="Preis pro Zusatzbett:" for="lfZusatzbettenPreis"></h:outputLabel>
                        <p:inputText id="lfZusatzbettenPreis"
                                     value="#{testbean.zimmer.lfZusatzbettenPreis}" required="true"></p:inputText>

                        <h:outputLabel value="Info:" for="sInfos"></h:outputLabel>
                        <p:inputTextarea id="sInfos" value="#{testbean.zimmer.sInfos}" required="true"></p:inputTextarea>
                        
                        <p:commandButton value="Add"
                                         action="#{testbean.add}" update="array" />
                        
                        <p:ajaxStatus style="width:16px;height:16px;">
                            <f:facet name="start">
                                <h:graphicImage value="images/ajax-loader.gif" />
                            </f:facet>

                            <f:facet name="complete">
                                <h:outputText value="" />
                            </f:facet>
                        </p:ajaxStatus>
                    </h:panelGrid>
                </p:panel>

                <p:dataTable id="array" value="#{testbean.array}" var="zimmer">
                 
                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="Name" />
                        </f:facet>
                        <h:outputText value="#{zimmer.sName}" />
                    </p:column>

                </p:dataTable>
                
            </h:form>
        </p:dialog>

        <p:dialog header="Kunden" widgetVar="KundenDialog">
        </p:dialog>

           <!--- <h:commandButton image="/images/dock/zimmer.png" action="#{loggerBean.write('asd')}"/> !-->

        </h:form>
    </body>
</html>
```
ich check einfach nicht warum das nicht geht.... bin seit 5 tagen am verzweifeln
Naja bei anderen heißen die test  bei mir eben penis ^^ bringt ein bisschen laune rein ^^


----------



## Nogothrim (22. Mrz 2011)

Bau mal ein <panel> oder <hanelGroup> um die DataTable, gib diesen eine Id und update dann das Panel statt der Table im commandButton.


----------



## JimPanse (22. Mrz 2011)

Hi,

du hast mehrere Form's ineinander verschachtelt -> das Funktioniert so nicht!!!!!!


```
<h:form styleClass=".ui-stack"> //1.
....
<h:form prependId="false"> //2.

 </h:form>
... 
 </p:dialog>
....
  </h:form>
```


Benutze mal nur eine Form oder trenn diese voneinander dann sollte es funktionieren!

s.h. Forms in HTML documents

laut HTML-Spezifikation dürfen Formulare auch nicht ineiander verschachtelt werden  weil der Request dann nicht richtig interpretiert werden kann!

Grüße


----------



## moessi91 (22. Mrz 2011)

thx


----------

