Merhaba, Picklistbean classında sessionscoped tanımlamadığımda picklist dolu geliyor fakat sessionscoped olduğunda boş geliyor, ve ben bu picklistin içinden seçilenin id sini başka bir managed bena de kullanmak istiyorum, injection yaptım olmadı. Yardım eden olursa sevinirim.

@ManagedBean(name="pickListBean")
public class PickListBean {

private DualListModel<TrvrTani> tanis;

private DualListModel<TrvrIlac> ilacs;

public DualListModel<TrvrIlac> getIlacs() {
return ilacs;
}

public void setIlacs(DualListModel<TrvrIlac> ilacs) {
this.ilacs = ilacs;
}

public DualListModel<TrvrTani> getTanis() {
return tanis;
}

public void setTanis(DualListModel<TrvrTani> tanis) {
this.tanis = tanis;
}

public PickListBean() {

List<TrvrTani> sourcetani = new ArrayList<TrvrTani>();
List<TrvrTani> targettani = new ArrayList<TrvrTani>();

TrvrTaniDAO tanidao = new TrvrTaniDAO();
List<TrvrTani> taniList = tanidao.findAll();
for (TrvrTani tani : taniList) {
    sourcetani.add(new TrvrTani(tani.getTaniid(), tani.getTaniadi(),
            tani.getTanikodu()));
}

tanis = new DualListModel<TrvrTani>(sourcetani, targettani);

List<TrvrIlac> sourceilac = new ArrayList<TrvrIlac>();
List<TrvrIlac> targetilac = new ArrayList<TrvrIlac>();

TrvrIlacDAO ilacdao = new TrvrIlacDAO();
List<TrvrIlac> ilacList = ilacdao.findAll();
for (TrvrIlac ilac : ilacList) {
    sourceilac.add(new TrvrIlac(ilac.getIlacid(), ilac.getIlacad(),
            ilac.getBarkod(), null));
}

ilacs = new DualListModel<TrvrIlac>(sourceilac, targetilac);

}

public void onTransferTani(TransferEvent event) {
StringBuilder builder = new StringBuilder();
for (Object item : event.getItems()) {
    builder.append(((TrvrTani) item).getTaniadi()).append("<br />");
}

FacesMessage msg = new FacesMessage();
msg.setSeverity(FacesMessage.SEVERITY_INFO);
msg.setSummary("Items Transferred");
msg.setDetail(builder.toString());

FacesContext.getCurrentInstance().addMessage(null, msg);
}

public void onTransferIlac(TransferEvent event) {
StringBuilder builder = new StringBuilder();
for (Object item : event.getItems()) {
    builder.append(((TrvrIlac) item).getIlacad()).append("<br />");
}

FacesMessage msg = new FacesMessage();
msg.setSeverity(FacesMessage.SEVERITY_INFO);
msg.setSummary("Items Transferred");
msg.setDetail(builder.toString());

FacesContext.getCurrentInstance().addMessage(null, msg);
}
}

xhtml

<h:outputText value="Tanı: " />
            <p:pickList id="picklist" value="#{pickListBean.tanis}" size="60"
                cols="60" var="tani" converter="acconverter"
                itemValue="#{tani}" itemLabel="#{tani.taniadi}"
                showSourceControls="false" showTargetControls="false"
                showCheckbox="false" showSourceFilter="true"
                showTargetFilter="true" filterMatchMode="contains">

                <f:facet name="sourceCaption">Tanılar</f:facet>
                <f:facet name="targetCaption">Eklenen tanılar</f:facet>

                <p:ajax event="transfer" listener="#{pickListBean.onTransferTani}" />

                <p:column style="width:75%;">  
                        #{tani.taniadi}  
                </p:column>

            </p:pickList>
            <br />
            <p:message for="picklist" />

            <h:outputText value="İlaç: " />
            <p:pickList id="picklist2" value="#{pickListBean.ilacs}" size="60"
                cols="60" var="ilac" converter="acconverterilac"
                itemValue="#{ilac}" itemLabel="#{ilac.ilacad}"
                showSourceControls="false" showTargetControls="false"
                showCheckbox="false" showSourceFilter="true"
                showTargetFilter="true" filterMatchMode="contains">

                <f:facet name="sourceCaption">İlaçlar</f:facet>
                <f:facet name="targetCaption">Eklenen ilaçlar</f:facet>

                <p:ajax event="transfer" listener="#{pickListBean.onTransferIlac}" />

                <p:column style="width:75%;">  
                        #{ilac.ilacad}  
                </p:column>

            </p:pickList>
            <br />
            <p:message for="picklist2" />

soruldu: 16 Nis '14, 08:22

burakh79's gravatar image

burakh79
1446
cevap kabul oranı: 0%

değiştirildi: 17 Nis '14, 01:50

sessionscoped tanımladığımda picklist boş geliyor

(16 Nis '14, 10:51) burakh79 burakh79's gravatar image

kaynak kodlarınızı paylaşınız.

(16 Nis '14, 14:15) Turgay Can Turgay%20Can's gravatar image

kaynak kodlarımı paylaştım

(17 Nis '14, 07:49) burakh79 burakh79's gravatar image

@ManagedBean kullandığın zaman ön tanımlı scope 'RequestScope' olur. Yani sen scope belirtmediğin zaman @RequestScope otomatik olarak tanımlanır.

Şimdi, sen bunu @SessionScope çevirdiğin zaman, transfer işlemini yaptıktan sonra session bitmediği müddetçe picklist boş kalacaktır çünkü session süresince bean içerisinde yaptıkların özelliklerini sürdürecektir.

Sorunun çözümüne gelince.

Başka bir bean içerisinde:

@ManagedProperty("#{pickListBean}") private PickListBean picklistbean;

tanımlayıp. onTransfer metodunu da bu bean içerisinde kullanarak istediğin objenin özelliklerine rahatça erişebilirsin.

Veya bir Builder Pattern'i oluşturup bu objeyi diğer bean'e gönderip de sorunu çözebilirsin. Daha başka çözümlerde var elbet fakat bu ikisi işini görecektir diye düşünüyorum.

permanent link

cevaplandı: 31 Mar, 21:24

lw0xh2's gravatar image

lw0xh2
01
cevap kabul oranı: 0%

değiştirildi: 31 Mar, 21:26

Cevabınız
toggle preview

powered by BitNami OSQA