Nasıl dataTable içinde commandLink için seçili satır geçebilir miyim?
AKSARAY 2 Uygulama Primefaces kullanıyorum. ** 14, satır seçmek yerine, kullanıcı doğrudan tek bir satır üzerinde çeşitli eylemleri gerçekleştirmek için mümkün olmak istiyorum. Bunun için, son sütunda <p:commandLink>
birkaç s var.
Benim sorunum: nasıl hareket biliyorum böylece eylem komut bağlantı ile başlayan bir satır NUMARASI geçebilir miyim? *16: kullanmaya çalıştım
<p:dataTable value="#{bean.items}" var="item">
...
<p:column>
<p:commandLink actionListener="#{bean.insert}" value="insert">
<f:attribute name="id" value="#{item.id}" />
</p:commandLink>
</p:column>
</p:dataTable>
Ama her zaman 0 - f
öznitelik işlenirken kullanılamaz satır görünüşe göre değişken (sabit bir değer kullandığımda çalışıyor) verir.
Kimse alternatif bir çözüm var mı?
CEVAP
Nedeni olarak, <f:attribute>
bileşenin kendisi için özel (derleme zamanı sırasında görünümü nüfuslu), yinelenen satır (görünüm sırasında işlemek zaman doldurulur).
Bu şartı sağlamak için çeşitli yollar vardır.
<f:param>
kullanın. Bir istek parametresi ekler.<h:commandLink action="#{bean.insert}" value="insert"> <f:param name="id" value="#{item.id}" /> </h:commandLink>
Eğer bean isteği, kapsamlı, AKSARAY
@ManagedProperty
ile durulayın@ManagedProperty(value="#{param.id}") private Long id; // setter
Ya eğer bean kapsamı daha geniş veya daha ince taneli doğrulama/dönüşüm istiyorsanız, hedef görünümü
<f:viewParam>
de f:viewParam vs @ManagedProperty bkz<f:viewParam name="id" value="#{bean.id}" required="true" />
Her iki şekilde de, bu datamodel mutlaka formu (fasulye isteği kapsamlı olduğu için) korunmuş olması gerekmez avantajı vardır.
<f:setPropertyActionListener>
kullanın. Avantajı bu isteği bean isteği daha geniş bir kapsamı vardır zaman göster parametre kapsam erişmek için ihtiyacını ortadan kaldırır.<h:commandLink action="#{bean.insert}" value="insert"> <f:setPropertyActionListener target="#{bean.id}" value="#{item.id}" /> </h:commandLink>
İle birlikte
private Long id; // setter
Özellik ile sadece mevcut olacak eylem yöntemi
id
. Bu datamodel formu isteği göndermek için korunur istiyor. En iyi görünüm@ViewScoped
kapsamında fasulye koymak.
Senin servletcontainer 3.0 / EL Sunucu uygulaması destekler 2.2, sadece yöntem değişken olarak geçirin. Bu da datamodel formu isteği göndermek için korunması gerekir. En iyi görünüm
@ViewScoped
kapsamında fasulye koymak.<h:commandLink action="#{bean.insert(item.id)}" value="insert" />
İle birlikte
public void insert(Long id) { // ... }
Hatta tüm madde yazılamaz:
<h:commandLink action="#{bean.insert(item)}" value="insert" />
ile:
public void insert(Item item) { // ... }
Sunucu uygulaması 2.5 kaplar, bu ise bunu destekleyen bir EL uygulanmasını sağlarsanız aynı zamanda, JBoss EL gibidir. Yapılandırma ayrıntıları için this answer bkz.
Bağlama sırayla öğeleri saran
DataModel<E>
yerine datatable değer.<h:dataTable value="#{bean.model}" var="item">
ile
private transient DataModel<Item> model; public DataModel<Item> getModel() { if (model == null) { model = new ListDataModel<Item>(items); } return model; }
(
transient
yapma ve tembel alıcısı içinde başlatmasınıDataModel
beri kapsamlı fasulyeSerializable
) sağlamayan bir görünüm veya bir oturumda bu kullanırken zorunludurSonra etrafta hiçbir OLUMSUZLUK tıklandığında komut bağlantı/düğmesi istek parametre adı dayalı satır belirler) geçmeden
DataModel#getRowData()
geçerli satır erişmek mümkün olacak.public void insert() { Item item = model.getRowData(); Long id = item.getId(); // ... }
Bu da datamodel formu isteği göndermek için korunması gerekir. En iyi görünüm
@ViewScoped
kapsamında fasulye koymak.
Program aracılığıyla mevcut
#{item}
değerlendirmekApplication#evaluateExpressionGet()
kullanabilirsiniz.public void insert() { FacesContext context = FacesContext.getCurrentInstance(); Item item = context.getApplication().evaluateExpressionGet(context, "#{item}", Item.class); Long id = item.getId(); // ... }
Seçmek için hangi bir veya diğer başka amaçlar için daha fazla avantaj sağlayıp fonksiyonel gereksinimleri ve bağlıdır. Ben şahsen #2 #3 veya sunucu uygulaması 2.5 kapları desteklemek için de istediğin zaman, devam et.
Nasıl bir proje içinde tek bir dosya i...
Nasıl böyle büyük mükafat içinde birde...
Nasıl bir setTimeout için bir parametr...
Nasıl/NVARCHAR dize eklemek bir SQL Se...
Nasıl grep bir klasör içinde bir kelim...