0

ユーザーがnullでも任意の日付を設定できるコンポーネントがありますが、日付がnullでない場合は、パネルをレンダリングして他のオプションを許可する必要があります。ただし、日付は更新されず、パネルがレンダリングされないため、常に null です。これについては助けが必要です。以下は私のコードです:

        <p:calendar id="dt"
                    value="#{user.deadline}"
                    pattern="MM/dd/yyyy"                        
                    showOn="button"
                    mindate="#{userr.minDate}">
            <f:validator validatorId = "dateValidator"/>
            <f:attribute name="minDate" value="#{user.minDate}" />

            <p:ajax event="dateSelect" listener="#{user.updateDeadlineDate}" update=":userForm:userReminderForm"/>
        </p:calendar>

        <p:panel id= "myPanel" rendered="#{user.getDeadline != null}">
         .. some component that needs user.deadline

        </p:panel>

私の豆からのスニペット:

   public Date getDeadline() {
    return deadline;
     }

public void setDeadline(Date deadline) {
    this.deadline=deadline;
      }
 public void updateDeadlineDate(DateSelectEvent event) {

    this.setDeadline(event.getDate());

}
4

2 に答える 2

2

いくつかのこと:

  • を使用する代わりに、 を使用#{user.getDeadline}できます#{user.deadline}
  • はどちらか一方を削除するのf:attribute name="minDate"と重複しています。p:calendar mindate="#{userr.minDate}"
  • のデフォルトのバリデーターがありますが、p:calendar特別な検証を行っている場合を除き、<f:validator>.
  • これが機能するには、Bean は少なくともビュー スコープ (リクエスト スコープではない) である必要があります。

この問題の非常に一般的な原因は、更新ターゲットが正しく設定されていないことです。firebug または何らかの要素検査を使用して、パネルの親に設定されている ID をブラウザで確認してください。

属性を使用する際に留意すべきことrenderedは、要素がクライアントから見えないことです。レンダリングされていない要素の親を更新するようクライアントに指示する必要があります。(すでにやっているようです。)

カレンダーとパネルが同じ形であれば対象として使えます@form。そうすることで、要素のフォームが更新されます。(これはおそらくあなたが望むものです。)

<p:calendar id="dt"
        value="#{user.deadline}"
        pattern="MM/dd/yyyy"                        
        showOn="button"
        mindate="#{userr.minDate}">
    <p:ajax event="dateSelect" listener="#{user.updateDeadlineDate}" update="@form"/>
</p:calendar>

<p:panel id= "myPanel" rendered="#{user.getDeadline != null}">
    .. some component that needs user.deadline
</p:panel>

おまけ:より便利なアップデート ターゲットについては、ここをクリックしてください

于 2012-10-16T13:43:55.820 に答える
1

まず、更新ターゲットが間違っている可能性があります (ネストされたフォーム:userForm:userReminderFormは HTML/JSF では無効です)。おそらくやりたかったのでしょう( siebz0rが指摘したupdate=":userForm"ように、パネルを直接更新できないため):

<p:ajax event="dateSelect" listener="#{user.updateDeadlineDate}" update=":userForm"/>

<p:panel id= "myPanel" rendered="#{user.deadline != null}">
     .. some component that needs user.deadline

</p:panel>

は不要です。バッキング Bean プロパティを参照する場合は、のgetDeadlineような名前を使用してdeadlineください。

<f:validator validatorId = "dateValidator"/>カレンダー コンポーネントのバリデーターを使用できるため、追加のタグを回避できることに注意してください。

<f:attribute name="minDate" value="#{user.minDate}" />この場合、タグはおそらく不要です。(同じ Bean にあるため)deadlineの値に設定する場合は、次のようにします。minDate

public void updateDeadlineDate(DateSelectEvent event) {
    mindDate = event.getDate()
    this.setDeadline(mindDate);
}

を削除し<f:attribute name="minDate" value="#{user.minDate}" />ます。

最後に、次の代わりに属性でemptyキーワードを使用します。rendered!= nullrendered="#{not empty user.deadline}"

于 2012-10-16T04:56:06.100 に答える