0

最初の属性マネージドビーン「refCont」の選択された値をマネージドビーンの2番目の属性に保存してから、投稿します。ただし、表示される値が最初に選択された値であることを知っているため、2 回目の選択後に値が表示されます。何が日本酒なのかわからない

.xhtml

<h:outputText value="* Contact" /> 
<h:selectOneMenu   id="contact" value="#{reclamationMB.refCont}"  onchange="lazyload()">
    <c:set value="#{reclamationMB.refCont}" target="#{contactMB}" property="refContt" />
    <f:ajax  listener="#{contactMB.affichReclContact}" />
    <f:selectItem itemLabel="Select One"  noSelectionOption="true" itemValue="---" /> 
    <f:selectItems value="#{contactMB.contactsClient}" noSelectionValue="" var="contact" itemValue="#{contact.refCont}" itemLabel="#{contact.nomCont}" />
    <f:selectItems itemLabel="Autre" itemValue=""></f:selectItems>
</h:selectOneMenu>

最初の ManagedBean:

 @RequestScoped
    public class ReclamationMB extends AbstractMB implements Serializable {
        private int refCont;//ref contact recuperé pour la creation de la  reclamation 
        .....
//getter and setter

2 番目のマネージド Bean

 @RequestScoped 
    public class ContactMB extends AbstractMB implements Serializable {
    @ManagedProperty("#{reclamationMB.refCont}")
            private int refContt;
            .....
    //getter an setter
    public void affichReclContact(AjaxBehaviorEvent event){
            contact=service.AffichContact(refContt);
            setContact(contact);
    }
4

1 に答える 1

0

問題は、JSTL<c:set>がビュー ビルド時間タグ ハンドラーであり、ビュー レンダリング時間UI コンポーネントではないため、問題は古典的なものです。値を設定すると予想される場合、コンポーネント ツリーには存在しません。<h:selectOneMenu>また、タグが全く無いと走ってしまいました。

もちろん、<h:selectOneMenu>実装されている場合はActionSource、 のように、Bean プロパティに必要な値を設定するという理由で、<h:commandButton>JSF をネストすることができます。しかし、それはできません。<f:setPropertyActionListener><f:setPropertyActionListener target="#{contactMB.refContt}" value="#{reclamationMB.refCont}">

基本的に、次の 2 つのことを行うことができます。

  1. 上記のアクション リスナーを保持できるPrimeFaces<p:remoteCommand>タグを使用して、必要な値を設定し、onchangeメソッドで呼び出します。Stack Overflow や優れた PrimeFaces のドキュメントには、そのような例がたくさんあります。
  2. Bean プロパティ インジェクションだけでなく、Bean インジェクションを利用します。前者の場合、によって注入された Bean を保持する変数である場合、式reclamationMB.getRefCont()は常にホルダー Bean に正しい結果をもたらします。reclamationMB@ManagedProperty
于 2013-05-05T16:17:12.787 に答える