JSF 2.1 web アプリでは、commandButton を含む dataTable の列があります。commandButton によってトリガーされるアクションは、エラーをスローする場合があります。エラーがスローされない場合はダイアログを開き、それ以外の場合はエラーメッセージを含むボックスを開きたい.
JSF
<h:form>
<p:dataTable var="foo" value="#{myBean.foos}" >
<p:column>#{foo.id}</p:column>
<p:column>
<p:commandButton title="Action" action="#{myBean.action()}" onComplete="handleResult(xhr, status, args)" >
<f:setPropertyActionListener value="#{foo}" target="#{myBean.selectedFoo}" />
</p:commandButton>
</p:column>
</p:dataTable>
</h:form>
JavaScript
function handleRequest(xhr, status, args) {
if (!args.success) {
displayBox(args.errorMsg);
} else {
displayDialog();
}
}
マイビーン
@ManagedBean
@ViewScoped
public class MyBean {
private List<Foo> foos;
private Foo selectedFoo;
public void action() {
try {
// business logic
} catch (Exception ex) {
RequestContext rContext = RequestContext.getCurrentInstance();
rContext.addCallbackParam("success", false);
rContext.addCallbackParam("errorMsg", ex.getMessage());
}
}
}
私が考えることができる唯一の解決策は、PrimeFaces を使用しRequestContext.callBackParam()
、それを読み取って何を開くかを決定する JS 関数を作成することです。
もっとスムーズな方法はありますか?可能であれば、検証の概念を活用することを検討したいと思いますが、JS でエラーをインターセプトする方法の例が見つかりません。