LoginSignup
0
0

More than 3 years have passed since last update.

FacesMessageを設定したのに表示されないときの対応方法

Last updated at Posted at 2020-08-12

事象 : FacesMessageをコンテンツに設定したのにメッセージが表示されない

  • 環境
    • CentOS Linux release 7.8.2003 (Core)
    • Eclipse IDE for Enterprise Java Developers.Version: 2020-03 (4.15.0)
    • openjdk version "11.0.7" 2020-04-14 LTS
    • JSF 2.3.9
ajaxでメソッドを実行して
  <h:form id="formId">
    <div id="uploadArea">
<!--...省略...-->
          <f:ajax event="change" execute="uploadArea" render="uploadArea" listener="#{uploadBean.uploadFile}" />
<!--...省略...-->
      <div>
        <h:message for="uploadArea" errorClass="error" warnClass="warn" infoClass="info" />
      </div>
    </div>
  </h:form>
メソッドでメッセージをコンテンツに設定したのに表示されない
    public void uploadFile(AjaxBehaviorEvent event) throws IOException {
        if (!isUpload()) {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "", "ファイルが選択されなかったよ。");
            event.getFacesContext().addMessage("uploadArea", message);
//...省略...
出力されたHTML
<form id="formId" name="formId" method="post" action="/tryJsf/base.jsf" enctype="application/x-www-form-urlencoded">
  <input type="hidden" name="formId" value="formId">
  <div id="uploadArea">
<!--...省略...-->
    <input id="formId:file" type="text" name="formId:file" style="display:none;" onchange="mojarra.ab(this,event,'change','uploadArea','uploadArea')">
    <div>
    </div>
  </div>
  <input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="-7689768516583343150:2206148480801750608" autocomplete="off">
</form>

原因 : 不明(誰か教えてください。)

どうもf:ajaxのメソッドが実行された後に再表示されていないもよう。
render="uploadArea"が・・・無視られた?HTMLのタグはダメ?JSFのタグじゃなきゃダメ?
JSFのタグで書かないものはコンポーネントではない?

The clientIds of components that will participate in the "render" portion of the Request Processing Lifecycle.
ajax(JSF 2.2 View Declaration Language: Facelets Variant)

対応方法 : divタグをh:panelGroupに変える

ajaxでメソッドを実行して
  <h:form id="formId">
    <h:panelGroup id="uploadArea">
<!--...省略...JSFのタグにしたので指定するid属性にする..-->
          <f:ajax event="change" execute="formId:uploadArea" render="formId:uploadArea" listener="#{uploadBean.uploadFile}" />
<!--...省略...-->
      <div>
        <h:message for="formId:uploadArea" errorClass="error" warnClass="warn" infoClass="info" />
      </div>
    </div>
  </h:form>
メソッドでメッセージをコンテンツに設定したら表示された
    public void uploadFile(AjaxBehaviorEvent event) throws IOException {
//...省略...対応前と同じ...指定するid属性だけ変える...
            event.getFacesContext().addMessage("formId:uploadArea", message);
//...省略...対応前と同じ...
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0