Ustawienie wartości domyślnej beana.

0

Witam. Mam taki panel dodawania użytkownika:

    <h:body>
        <h1>Dodaj administratora</h1>
        <f:view>
            <h:form>
                <h:panelGrid columns="3">
                    <h:outputLabel for="firstName" value="Imie:"/>
                    <h:inputText id="firstName" value="#{userMB.user.firstName}" label="firstName" required="true">
                        <f:validateRegex pattern="[A-Z{1}]+[a-z]+"/>
                    </h:inputText>
                    <h:message for="firstName" style="color:red" />

                    <h:outputLabel for="lastName" value="Nazwisko:"/>
                    <h:inputText id="lastName" value="#{userMB.user.lastName}" label="lastName" required="true">
                        <f:validateRegex pattern="[A-Z{1}]+[a-z]+"/>
                    </h:inputText>
                    <h:message for="lastName" style="color:red" />

                    <h:outputLabel for="personalId" value="Pesel:"/>
                    <h:inputText id="personalId" value="#{userMB.user.personalId}" label="personalId" required="true">
                        <f:validateRegex pattern="[0-9]{11}"/>
                    </h:inputText>
                    <h:message for="personalId" style="color:red" />

                    <h:outputLabel for="password" value="Haslo:"/>
                    <h:inputSecret id="password" value="#{userMB.user.password}" label="password" required="true"/>
                    <h:message for="password" style="color:red" />
                    
                </h:panelGrid>
                <h:panelGrid columns="2">
                    <h:commandButton action="#{userMB.createUser()}" value="Dodaj"/>
                    <h:commandButton action="#{userMB.adminList()}" value="Anuluj" immediate="true"/>
                </h:panelGrid>
            </h:form>
        </f:view>
    </h:body> 

Mam 4 pola do wypełnienia, ale chcę aby 5 pole odpowiedzialne za typ było automatycznie ustawione na wartość np. admin. Jednak zupełnie nie wiem jak tak domyślnie ustawić wartość:

userMB.user.role

na admin. Najlepiej nie musząc tego prezentować na stronie. Chodzi o to żeby było to od razu w domyśle.

0

W konstruktorze beana?

0
bogdans napisał(a):

W konstruktorze beana?

Mogłem spodziewać się takiej odpowiedzi, ale mój błąd już się poprawiam. Chodzi o to, że czasem będę chciał żeby ta wartość była admin a czasem inna dlatego konstruktor odpada bo by mi zawsze tam admina ustawiał.

0

Czyli chcesz zeby:

  1. nie bylo konfigurowalne na stronce, ma byc 'od razu w domysle' 'automatycznie ustawione na wartość np. admin'
  2. nie ma byc w konstruktorze, bo tam bedzie zawsze to samo a ty chcesz 'zeby ta wartość była admin a czasem inna' (czyli konfigurowalne)
    Dobrze zrozumialem?
0
mućka napisał(a):

Czyli chcesz zeby:

  1. nie bylo konfigurowalne na stronce, ma byc 'od razu w domysle' 'automatycznie ustawione na wartość np. admin'
  2. nie ma byc w konstruktorze, bo tam bedzie zawsze to samo a ty chcesz 'zeby ta wartość była admin a czasem inna' (czyli konfigurowalne)
    Dobrze zrozumialem?

Tak.
Mam klase User, w której jest pole role. I mam strony na których mam możliwość dodania użytkownika typu admin, moderator, user itp. Jeśli przejdziemy na stronę dodawania admina to chcę aby ta wartość od razu była ustawiona na admin, a jak na stronie dodawania usera to wtedy role ustawione na user.

1

Ukryte pole formularza - na odpowiedniej stronie inna wartość dla roli?

Inne metody na odpowiednich stronach: dodajUsera(); dodajAdmina() a w ich wnętrzu ustawienie odpowiedniej roli?

0
Swr napisał(a):

Ukryte pole formularza - na odpowiedniej stronie inna wartość dla roli?

Hmm. Właśnie myślałem też nad tym, ale nie wiem jak to zrobić? Jedyne co mi przychodziło do głowy to:

<h:inputHidden value="" /> 

Tylko jak wrzucę do value mojego beana: value="#{userMB.user.role}"

 to nie mam pojęcia jak go domyślnie ustawić np na admin w tym inpucie?


 > ##### [Swr napisał(a)](http://4programmers.net/Forum/954554):
> Inne metody na odpowiednich stronach: dodajUsera(); dodajAdmina() a w ich wnętrzu ustawienie odpowiedniej roli?


Tzn. W swoim beanie zamiast jednej metody create miałbym zrobić kilka do każdego konta?

Myślałem o zrobieniu czegoś takiego, że w swoim beanie UserMB dodałem metodę:

```java
    
    public void setAdmin() {
        this.user.setRole("admin");
    } 

A na stronie coś takiego:

<h:outputLabel for="role" value="Typ:"/>
                    <h:inputText id="role" value="#{userMB.setAdmin()}" label="role" required="true"/>

ale to nie działa.

1
<h:outputLabel for="role" value="Typ:"/>
                    <h:inputText id="role" value="#{userMB.setAdmin()}" label="role" required="true"/>

ale to nie działa.

Nie wiem czy to jakaś specjalna składnia czy jak, że jest to z nawiasami i ma przedrostek set, ale chyba powinno być inaczej.

Dla przykładu:

public class TwojBean{
   private String zmienna = null;

   public void setZmienna(String zmienna){ //tzw. setter
      this.zmienna = zmienna;
   }

   public String getZmienna(){ //tzw. getter
      return zmienna;
   }
}

Stosuje się tu pewną konwencję, właśnie wykorzystując przedrostki set i get ale w beanie już się przedrostków nie pisze, poczytaj o tym.

Korzystając teraz z <h:inputText> do value przypisujemy tak

<h:inputText value="#{twojBean.zmienna}"/>

Podczas odczytywania bean będzie korzystać z gettera. Podczas przesłania przy pomocy formy będzie korzystać z settera.
Ty natomiast chyba coś poplątałeś.

====Tu mały edit:=====
Chciałeś wywołać akcję, musiałbyś takie coś przypisać do action, ale inputText nie posiada takiego parametru, commandButton za to tak.

Tzn. W swoim beanie zamiast jednej metody create miałbym zrobić kilka do każdego konta?

No np. coś takiego:


private void mainCreate()
{
//logika tworzenia
}

public void adminCreate()
{
   //ustawienie roli admina
   this.mainCreate();
}

public void userCreate()
{
   //ustawienie roli usera
   this.mainCreate();
}

Mając taki kod na stronie do tworzenia admina zrobiłbyś pod przyciskiem Dodaj:

<h:commandButton action="#{userMB.createAdmin}" value="Dodaj"/>

a na innych odpowiednio to samo tylko z wywołaniem innej akcji - odpowiedniej dla tworzonego konta.

Tu masz np. jak przekazać ukrytą wartość do beana: http://www.mkyong.com/jsf2/how-to-pass-new-hidden-value-to-backing-bean-in-jsf/

1

czym sie będą różniły strony dodające różnego typu userów ? tylko typem ? kiedy bedzie wybór jakiego typu konto ma być utworzone ? mozesz spróbowac na stronie z wyborem typu konta ustawić parametr na requescie np new_user_role='admin' i w formularzu uzyc tego <h:inputHidden value="#{param['new_user_role']}" id="userRole" />

0

Swr ja to w sumie wszystko wiem, tylko chciałem jakoś na stronie ustawić wartość domyślnie od razu i nie wiedziałem jak to zrobić, ale dzięki za pomoc.
kemot dzięki za podsunięcie pomysłu z parametrami. Wszystko działa tak jak chciałem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1