を追加するために豆からコマンドボタンを:アクセスPrimeFacesは、私はID「保存」を持つビューで次のコマンドボタンを持つアクションリスナー
<p:panel style="border:none;text-align:left;margin:0;">
<p:commandButton value="Save Document" id="save" icon="fa fa-save"
disabled="#{dIGRCController.digrc.qconce == '020'}">
<f:param name="validate" value="true" />
</p:commandButton>
<p:commandButton value="Clear" icon="fa fa-undo"></p:commandButton>
</p:panel>
私は動的に異なるActionListenerを割り当てるしようとしています。ユーザーが新しいレコードをいくつか挿入したい場合は、insertメソッドを呼び出す必要があります。ユーザーが既存のレコードを更新したい場合は、updateメソッドを呼び出す必要があります。
は今、私はこれを行うにしようとしています:
@PostConstruct
public void init() {
// setting the action listener of the Save Document button
UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
// UIComponent button = viewRoot.findComponent("save");
CommandButton button = (CommandButton) viewRoot.findComponent("save");
FacesContext context = FacesContext.getCurrentInstance();
MethodExpression methodExpression = context
.getApplication()
.getExpressionFactory()
.createMethodExpression(context.getELContext(),
"#{dIGRCController.updateDocument}", null,
new Class[] { DIGRCController.class });
button.addActionListener(new MethodExpressionActionListener(
methodExpression));
}
私はライン上でnullポインタ例外を取得しています:
button.addActionListener(new MethodExpressionActionListener(
methodExpression));
私が間違っているのか?私がしようとしていることを達成する別の方法がありますか?私はJSF 2.2、PrimeFaces 5.3、OmniFaces 1.11を使用しています。
'findComponent()'はコンポーネントIDではなく、引数としてクライアントIDをとります。しかし、これはすべて複雑すぎるように見えます。ビューの定義は通常、JavaクラスではなくXHTMLファイルで行われます。 Java側でコンポーネントツリーを操作することは貧しい方法です。そのためにはJSTLを使うほうが良いでしょう。つまり、Javaコードよりもコンポーネント/属性を定義するほど自己記述性の高いXHTMLを使い続けることができます。 – BalusC
入手しました。私はまた、2つのコマンドボタンを持つことを考えていた:更新ともう一つの挿入。そして、あるものには更新のための条件が与えられ、もうひとつには挿入条件が与えられる。そのデザイン@BalusCについてどう思いますか? – Erick
条件がどこから来るかによって異なりますが、それは確かに一方向です。条件がビューのビルド時間に基づいている場合は、基本的にJavaコードの試行と同じように、 ' 'という単一のコマンドボタンを使用できます。 –
BalusC