SORU
16 HAZİRAN 2011, PERŞEMBE


Ne &; f:meta> lt; <f:viewParam> ve <f:viewAction> için kullanılabilir?

Herkes genel olarak nasıl kullanabiliriz, ya da gerçek dünya örnekte, bu parçacık bir açıklık miyim?

<f:metadata>
    <f:viewParam id="id" value="#{bean.id}" />
    <f:viewAction action="#{bean.init}" />
</f:metadata>

CEVAP
16 HAZİRAN 2011, PERŞEMBE


İşlem parametreleri

<f:viewParam> GET parametreleri ayar, dönüştürme ve doğrulama yönetir. <h:inputText> ama o zaman parametreleri gibi.

Aşağıdaki örnek

<f:metadata>
    <f:viewParam name="id" value="#{bean.id}" />
</f:metadata>

temel olarak şunları yapar:

  • İsteği id ada göre değer parametre.
  • Dönüştürmek ve doğrulamak gerekirse (kullanabilirsiniz required, validator converter öznitelikleri yuvası <f:converter> <f:validator> o gibi <h:inputText>)
  • Eğer dönüşüm ve doğrulama Başarılı, Hazır gibi bir bean özelliği temsil #{bean.id} değeri veya value özniteliği yok, o zaman set olarak talep attribtue adı id böylece mevcut #{id} görünümü.

Yani foo.xhtml?id=10 sonra parametre değeri olarak sayfayı açtığınızda 10 doğru bakış oluşturulmadan önce işlem bu şekilde ayarlanmış.

Doğrulama için, aşağıdaki örnek required="true" param setleri ve 10 ile 20 arasında değerler verir. Herhangi bir doğrulama hatası mesajı neden olur.

<f:metadata>
    <f:viewParam id="id" name="id" value="#{bean.id}" required="true">
        <f:validateLongRange minimum="10" maximum="20" />
    </f:viewParam>
</f:metadata>
<h:message for="id" />

Parametreleri performans iş eylem

Bunun için <f:viewAction> kullanabilirsiniz.

<f:metadata>
    <f:viewParam id="id" name="id" value="#{bean.id}" required="true">
        <f:validateLongRange minimum="10" maximum="20" />
    </f:viewParam>
    <f:viewAction action="#{bean.onload}" />
</f:metadata>
<h:message for="id" />

ile

public void onload() {
    // ...
}

<f:viewAction> ancak OLUMSUZLUK 2.2 beri yeni (<f:viewParam> zaten OLUMSUZLUK 2.0 beri var). Eğer yükseltirseniz, o zaman en iyi bahis yerine <f:event> kullanıyor.

<f:event type="preRenderView" listener="#{bean.onload}" />

Bu ancak çağrılanheristek. Eğer bu isteği geri gönderme değil olsaydı zaten açıkça kontrol etmeniz gerekir:

public void onload() {
    if (!FacesContext.getCurrentInstance().isPostback()) {
        // ...
    }
}

Doğrulama başarısız oldu/"Dönüşüm" ise o zaman aşağıdaki gibi yapın . atlamak istediğiniz zaman

public void onload() {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    if (!facesContext.isPostback() && !facesContext.isValidationFailed()) {
        // ...
    }
}

<f:event> bu yolu kullanarak hack, <f:viewAction> AKSARAY 2.2 kullanılmaya başlandı yüzden/özünde geçici bir çözüm.


Bir sonraki görmek için parametreleri

"Pass-through" görünüm parametreleri navigasyon includeViewParams=true parametre istek ekleyerek true 42 *özniteliği ayarlayarak ya da bağlantıları vardır.

<h:link outcome="next" includeViewParams="true">
<!-- Or -->
<h:link outcome="next?includeViewParams=true">

<f:metadata> yukarıdaki örnek ile basitçe aşağıdaki bağlantıyı oluşturur

<a href="next.xhtml?id=10">

orijinal parametre değeri ile.

Bu yaklaşım sadecegerektirirnext.xhtml vardırayrıca<f:viewParam> aynı parametre, aksi takdirde geçmiş olmayacak.


Kullanım AKSARAY formları

<f:viewParam> ayrıca "düz HTML" formları ile birlikte kullanılabilir

<f:metadata>
    <f:viewParam id="query" name="query" value="#{bean.query}" />
    <f:viewAction action="#{bean.search}" />
</f:metadata>
...
<form>
    <label for="query">Query</label>
    <input type="text" name="query" value="#{empty bean.query ? param.query : bean.query}" />
    <input type="submit" value="Search" />
    <h:message for="query" />
</form>
...
<h:dataTable value="#{bean.results}" var="result" rendered="#{not empty bean.results}">
     ...
</h:dataTable>

Esas olarak @RequestScoped bu fasulye:

private String query;
private List<Result> results;

public void search() {
    results = service.search(query);
}

<h:message> <f:viewParam> düz HTML <input type="text"> değil için olduğunu unutmayın! Ayrıca giriş gönderilen değer, aksi halde doğrulama veya dönüşüm bir hata var zaman geleceğini değil, çünkü #{bean.query} boş zaman #{param.query} görüntüler değer, unutmayın. Bu yapı ("altında" zaten) kapsar. bu ne OLUMSUZLUK girdi bileşenleri için geçersiz olduğunu unutmayın lütfen


Ayrıca Bkz:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • JamesAtiPhone

    JamesAtiPhon

    16 EYLÜL 2010
  • Jay Will

    Jay Will

    19 NİSAN 2006
  • The Pet Collective

    The Pet Coll

    5 Ocak 2012