Announcement

Collapse
No announcement yet.

Eine JSF - Seite, mehrere Abschnitte, mehrere Emails

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #31
    Stimmt so ziemlich,. Nur ist die Methode sendeMail() bei mir eine reine Methode zum verschicken einer email. Den inhalt der email lasse ich im beispiel durch die assembleMessageFor Methoden erstellen. Ja bei dem was ich dir jetzt geschrieben habe, hast du für jeden recipient eine Methode die den inhalt der mail erstellt.
    „If there's more than one possible outcome of a job or task, and one of those outcomes will result in disaster or an undesirable consequence, then somebody will do it that way.“

    Murphys law

    Comment


    • #32
      ok!
      Ja, sendeMail() sollte auch eine reine Methode zum Verschicken sein.

      Nun noch die Frage:
      wie sieht denn die Methode assembleMessageForRecipient1() aus.

      Ganz einfaches Beispiel:
      Ein User kann auf dem Formular folgende Felder auswählen:
      - Stuhl
      - Tisch
      - Telefon
      - Schreibtisch

      Hierfür gibt es überall getter + setter!
      Jedoch hat er nur Stuhl und Tisch ausgewählt!
      Die anderen sind keine Pflichtfelder!
      Wie sieht das nun aus, dass nun wirklich per Mail nur Tisch und Stuhl übermittelt werden?

      Ich habe mal ein Vorschlag: Aber keine Ahnung ob das so stimmt?????

      private Vorgang newvorgang = new Vorgang();
      public String assembleMessageForRecipient1(){
      String liste = "";


      if(vorgang.setStuhl())
      {
      liste = "Stuhl";
      }

      if(vorgang.setTisch())
      {
      liste = liste + "Tisch";
      }

      if(vorgang.setTelefon())
      {
      liste = liste + "Telefon";
      }

      if(vorgang.setSchreibtisch())
      {
      liste = liste + "Schreibtisch";
      }

      return liste;
      }

      Comment


      • #33
        Also. Ich kann dir leider keine implementierung vorschlagen. Nicht weil ich nicht will, sondern weil ich nicht weiß welchen Typs deine Attribute sind und welche JSF-Komponenten du benutzt um sie eingeben zu lassen.
        Wenn es checkboxen sind (was mir bei dem was ich da ekrennen konnte für sinnvoll erachte) dann liest du ganz einfach die boolean attribute in der bean aus um festzustellen, ob sie ausgewählt wurden.

        Da das in deinem letzten Beitrag kein Fehler zu sein scheint, da du es fortlaufend in den if statements die setter angibst, muss ich daraus schließen, dass du dich leider nicht wirklich mit java-beans auskennst. Wenn du uns hier mal mitteilen könntest, wie weit du dich in java und objjektorientierung auskennst, dann könnten wir dir sehrt viel besser weiterhelfen. Ich möchte dir nicht auf die Füße treten, aber wenn ich Recht habe, dann solltest du vielleicht nicht unbedingt mit einem JSF-Projekt zum Einstieg beginnen. Java ist auch eine Insel ist als ein Einstieg für die Java-Programmierung ein sehr gutes Buch und ist online als openbook bei www.galileo-computing.de erhältlich.

        Mein Problem ist jetzt, dass ich nämlich langsam dein Problem nicht mehr verstehe. Du weißt jetzt wie du mails verschickst. du weißt jetzt auch wie du dafür sorgst, dass mehrere mails an verschiedene Empfänger gehen. Den Inhalt der mails zu erstellen sollte eigentlich überhaupt kein Problem für dich darstellen, da du sämtliche Eingaben des Benutzers ja in der Backingbean wiederfinden kannst. wie du mit diesen Eingaben umgehst können wir dir ja nicht erklären, weil wir keine Kenntnis über deine genaue Businesslogik haben. Wenn du wirklich mit Strings arbeitest und dein Benutzer bei dem Feld Stuhl nichts eingetragen hat wäre eine Überprüfung der Eingabe z.B. so zu erreichen.

        //Wenn der String leer ist. Und den Inhalt von Attributen holt man über die getter.
        //Über Setter werden die Attribute gesetzt.
        if(getstuhl().isEmpty())
        {
        //TODO//
        }

        Teil uns wie gesagt am besten mal mit wie weit du in der Programmierung in Java und der Objektorientierung bist und wir können dir ein paar gute Ressourcen nennen, mit denen du dich in die Themen einarbeiten kannst
        Zuletzt editiert von greengrisu; 08.09.2009, 00:52.
        „If there's more than one possible outcome of a job or task, and one of those outcomes will result in disaster or an undesirable consequence, then somebody will do it that way.“

        Murphys law

        Comment


        • #34
          Guten Morgen,
          ja, Checkboxen verwende ich! Dafür nehme ich Enums.(Klar, Boolean geht auch! Aber ich bin mir noch nicht sicher, ob ich ev. einen dritten Status mache!)
          Ich hänge im Anhang mal die Entity für einen "Vorgang" an, sowie die "Einrichtung"
          Zu deiner Frage wie weit meine Kenntnisse in JAVA reichen: Ich befasse mich seit ca. 5 Jahren damit. Aber zu behaupten, dass ich fit darin bin, wäre schlicht und einfach gelogen.
          Dafür fehlt mir auch einfach die Übung und das stetige Programmieren.

          public class Einrichtung implements Serializable {


          private static final long serialVersionUID = 8073276270039785999L;

          @Id
          @GeneratedValue(generator="einrichtung_id_seq",str ategy=AUTO)
          @SequenceGenerator(name="einrichtung_id_seq", sequenceName="einrichtung_einrichtung_id_seq", allocationSize=1)
          @Column(name="einrichtung_id",nullable=false)
          private Long id=NO_ID;


          public enum Arbeitsplatzausstattung
          {
          JA,
          NEIN
          }
          @Column(name="arbeitsplatzausstattung",length=4,nu llable=false)
          @Enumerated(STRING)
          private Arbeitsplatzausstattung arbeitsplatzausstattung = Arbeitsplatzausstattung.NEIN;


          public enum ApaErledigt
          {
          ERLEDIGT,
          OFFEN
          }
          @Column(name="apa_erledigt",length=8,nullable=fals e)
          @Enumerated(STRING)
          private ApaErledigt apaErledigt = ApaErledigt.OFFEN;

          @Column(name="apa_bemerkung",length=BEMERKUNG_STRI NG_MAX,nullable=false)
          private String apaBemerkung=LEERER_STRING;

          public enum EinrichtungStatus
          {
          ERLEDIGT,
          OFFEN
          }
          @Column(name="einrichtungstatus",length=8,nullable =false)
          @Enumerated(STRING)
          private EinrichtungStatus einrichtungstatus = EinrichtungStatus.OFFEN;


          @Temporal(DATE)
          private Date erstelldatum=null;


          @ManyToOne(optional=false)
          @JoinColumn(name="vorgang_fk")
          private Vorgang vorgang;



          // Getter + Setter

          public void setApaErledigt(ApaErledigt apaErledigt)
          {
          if(apaErledigt != null) {
          this.apaErledigt = apaErledigt;
          if(apaErledigt == ApaErledigt.ERLEDIGT) {
          setEinrichtungStatus(EinrichtungStatus.ERLEDIGT);
          }
          }
          }

          public ApaErledigt getApaErledigt()
          {
          return apaErledigt;
          }



          public void setEinrichtungStatus(EinrichtungStatus einrichtungstatus)
          {
          if(einrichtungstatus != null) {
          this.einrichtungstatus = einrichtungstatus;
          }
          }

          public EinrichtungStatus getEinrichtungStatus()
          {
          return einrichtungstatus;
          }


          // ####### Methoden #########

          // Überprüfen, ob der Arbeitsplatz erledigt wurde!
          // Ein Arbeitsplatz ist erst dann erfolgreich erledigt, wenn überhaupt eine Arbeitsplatzaus-
          // stattung erforderlich ist. Wenn das der Fall ist, wird true zurückgeliefert!
          public boolean isApaErledigt()
          {
          if((arbeitsplatzausstattung == Einrichtung.Arbeitsplatzausstattung.JA &&
          apaErledigt == Einrichtung.ApaErledigt.ERLEDIGT))
          {
          return true;
          }
          return false;

          /* Würde auch so gehen
          return (arbeitsplatzausstattung == Einrichtung.Arbeitsplatzausstattung.JA &&
          apaErledigt == Einrichtung.ApaErledigt.ERLEDIGT); */
          }

          // Überprüfen, ob die komplette Einrichtung auf erledigt gesetzt wurde!
          // Ein Status ist erst der erledigt, wenn alle gesetzten Sachen auch erledigt wurden!
          public boolean isEinrichtungStatusErledigt()
          {
          if((isApaErledigt() == true))
          {
          //return status == Status.ERLEDIGT;
          return true;
          }
          return false;
          }






          // GETTER + SETTER

          public Long getId() {
          return id;
          }

          public void setId(Long id) {
          this.id = id;
          }

          public Arbeitsplatzausstattung getArbeitsplatzausstattung() {
          return arbeitsplatzausstattung;
          }

          public void setArbeitsplatzausstattung(
          Arbeitsplatzausstattung arbeitsplatzausstattung) {
          this.arbeitsplatzausstattung = arbeitsplatzausstattung;
          }

          public String getApaBemerkung() {
          return apaBemerkung;
          }

          public void setApaBemerkung(String apaBemerkung) {
          this.apaBemerkung = apaBemerkung;
          }

          public EinrichtungStatus getEinrichtungstatus() {
          return einrichtungstatus;
          }

          public void setEinrichtungstatus(EinrichtungStatus einrichtungstatus) {
          this.einrichtungstatus = einrichtungstatus;
          }

          public Date getErstelldatum() {
          return erstelldatum;
          }

          public void setErstelldatum(Date erstelldatum) {
          this.erstelldatum = erstelldatum;
          }

          public Vorgang getVorgang() {
          return vorgang;
          }

          public void setVorgang(Vorgang vorgang) {
          this.vorgang = vorgang;
          }


          Und die Entity "Vorgang":
          public class Vorgang implements Serializable {

          @Id
          @GeneratedValue(generator="vorgang_id_seq",strateg y=AUTO)
          @SequenceGenerator(name="vorgang_id_seq", sequenceName="vorgang_vorgang_id_seq", allocationSize=1)
          @Column(name="vorgang_id",nullable=false)
          private Long id=NO_ID;

          public enum VorgangStatus
          {
          ERLEDIGT,
          OFFEN
          }
          @Column(name="vorgangstatus",length=10,nullable=fa lse)
          @Enumerated(STRING)
          private VorgangStatus vorgangstatus = VorgangStatus.OFFEN;


          @Temporal(DATE)
          private Date erstelldatum=null;


          @OneToMany(mappedBy="vorgang", fetch=EAGER,cascade={MERGE,REMOVE})
          @OrderBy("id ASC")
          private List<Einrichtung> einrichtungen;


          @ManyToOne(optional=false)
          @JoinColumn(name="person_fk")
          private Person person;


          public Long getId() {
          return id;
          }


          public void setId(Long id) {
          this.id = id;
          }


          public VorgangStatus getVorgangstatus() {
          return vorgangstatus;
          }


          public void setVorgangstatus(VorgangStatus vorgangstatus) {

          this.vorgangstatus = vorgangstatus;
          }


          public Date getErstelldatum() {
          return erstelldatum;
          }


          public void setErstelldatum(Date erstelldatum) {
          this.erstelldatum = erstelldatum;
          }


          public Person getPerson() {
          return person;
          }


          public void setPerson(Person person) {
          this.person = person;
          }

          Comment


          • #35
            5 Jahre sind doch gut. Länger als ich mit Java zu tun habe Wie gesagt ich wollte dir auch nicht zu nahe treten, aber so hast dus ja auch nicht aufgefasst wie es scheint.

            So, ich glaube ich verstehe deine Anforderungen jetzt besser. Du möchtest also einem Benutzer quasi ermöglichen eine Bestellung aufzugeben. Dazu gehst du folgerndermaßen vor. Du legst einen neuen Vorgang an. Zu einem Vorgang gehören mehrere Einrichtungsobjekte. Ein Einrichtungsobjekt kann ein Arbeitsplatzeinrichtung sein. Und es weiß selber, ob es erledigt wurde (ich nehme an damit willst du sagen, ob es schon geliefert/aufgestellt wurde?).

            Ich versuch mich mal wietestgehend an deine Entitäten zu halten, wobei ich einen Änderungsvorschlag habe.
            Ein Einrichtungsobjekt weiß ja ob es eine Arbeitsplatzeinrichtung ist oder nicht. Ob ein Einrichtungsobjekt erledigt wurde, weiß es ja auch selber. Also ist es eigentlich überflüßig noch zu sagen, dass es als Arbeitsplatzeinrichtung erledigt wurde. Ist doch so, wenn ein Einrichtungsobjekt eine Arbeitsplatzeinrichtung ist, und das Einrichtungsobjekt erledigt wurde, dann muss es doch als Arbeitsplatzeinrichtung erledigt worden sein, oder? Kann auch sein dass dus noch für andere Businesslogik so unterscheiden musst, aber das kann ich jetzt ja nur raten.

            Zum eigentlichen. Mein Vorschlag wäre folgender:

            Wenn du für einen Benutzer einen neuen Vorgang anlegst, dann gestallte doch ein paar JSPs wie für eine Shoppingcart. Also biete die Möglichkeit dem Vorgang Einrichtungsobjekte hinzuzufügen, sie zu entfernen und sie zu editieren. Wenn jetzt dein Benutzer fertig ist mit seiner Bestellung, dann geht er auf "Bestellung abschicken", oder "Auftrag versenden" oder wie dus auch nennst. Dann werden die emails verschickt.

            Bis jetzt sollten zwie Backingbean existieren. Die eine legt einen Vorgang an und verwaltet ihn. Die zweite legt Einrichtungsobjekte an und fügt sie einem Vorgang hinzu. Das kann auch alles in eine Beakingbean gepackt werden, wenn man nicht mit dem SessionContext arbeiten will.

            Wenn du dann die emails zusammenstellen willst, musst du ja nur noch auf deinen Vorgang und seine Einrichtungsgegenstände zugreifen. Ich nehm jetzt mal als Bsp. an, dass eine mail an die Logistik geht und die andere an die Rechnungsabteilung.

            public String assembleMessageForLogistikabteilung(Vorgang vorgang) {

            String emailBody ="";

            emailBody = "Vorgangsnr.: "+vorgang.getId();
            emailBody. = emailBody.concat("\n Kundennr.: "+vorgang.getPerson()..getId();
            ...
            emailBody = emailBody.concat("\n Bestellposten:");
            for(Einrichtung einrichtung : vorgang.getEinrichtungen())
            {
            emailBody = emailBody.concat("\n "+einrichtung.getBeschreibung());
            ....
            }

            return emailBody;
            }
            Ist das so ungefähr was du dir vorstellst? Wenn du das ausgibiger diskutieren willst, dann kannst du mir auch per PM deine ICQ-Nummer geben. Denn das Thema ist mittlerweile ja eigentlich nicht mehr nur das wie man eine Email an mehrere Leute versendet
            „If there's more than one possible outcome of a job or task, and one of those outcomes will result in disaster or an undesirable consequence, then somebody will do it that way.“

            Murphys law

            Comment

            Working...
            X