immediate = "true"(JSF 1.2)で少し問題があります。私のフォームは車の事故についてです:ユーザーは、いくつかのubication情報を記入し、彼は(木、フェンス、他の車など)を希望のように、彼はできるだけ多く、影響を受けた項目を追加することができますimmediate = "true"および必須フィールドの問題
豆
private String location;
private List<T> items;
private HtmlDataTable itemsUI;
public void remove(ActionEvent e) {
String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
items.remove(Integer.parseInt(id));
}
public void add(ActionEvent e) throws InstantiationException, IllegalAccessException {
items.add(element.newInstance());
}
をバックアップ
JSPX
<h:inputText
required="true"
value="#{ACC01.location}"/>
<h:dataTable
binding="#{ACC01.itemsUI }"
value="#{ACC01.items}"
var="item">
<h:column>
<h:selectOneMenu
value="#{item.id}>
<f:selectItems
value="#{ACC01.possibleElements}" />
</h:selectOneMenu>
<h:commandLink
actionListener="#{ACC01.remove }"
value="Remove" >
<f:param
name="id"
value="#{ACC01.itemsUI.rowIndex }"/>
</h:commandLink>
</h:column>
</h:dataTable>
<h:commandLink
actionListener="#{ACC01.add}"
value="Add" />
問題
dataTableの影響を受ける要素に対してimmediate = "true"を設定した場合、ユーザーが新しい要素を追加すると、他の要素はデフォルト値に戻ります(例:
私が直ちに使用しない場合、影響を受けるのは、あなたが{'tree'、 'car'、 'fence'}を持っていれば、それらは{default、default、default、new element}要素は適切な値を保持しますが、ユーザーは影響を受ける要素を追加または削除する前に「場所」フィールドに入力する必要があります。私が欲しいもの
は、影響を受けた要素の値を、ユーザーが記入することなく、それらを追加または削除できるようにする 『キープ最初の場所』フィールドをできるようにすることです。
回避策
このトピックに関する多くの記事を読んだ後、行くための唯一の方法は、自動検証を回避し、ユーザーがフォームを送信したときにそれを手動で行うことであるようです。
必要なフィールドでヌルをチェックし、プログラムによってエラーメッセージをfacescontextに追加します。私はそれが醜いと思うので、私は本当にそれをしたくありません。
私が必要とする行動を達成するためのより良い方法をお勧めしますか?事前に
おかげで私の現在の仕事で、以前の開発者の
ちょっとおかげさまで、やりたいことが少ないように聞こえますが、まだ機能的な解決策です。 –
実際、私は何も変更する必要はありませんでしたが、スニペットはそのまま動作します。 Kartikにもう一度感謝します。 –