3

リッチフェイス4でJSF2を使用しています。私の目的は、バックエンドのメソッドから生成されたリクエストIDを、ajaxを使用して入力テキストフィールドに表示することです。

ここに私のコードのスニペットがあります:


....
    <h:outputText value="Drawer No" /> 
    <h:outputText value="*" style="color:#ff0000;"/> 
    <h:inputText id="drawer" value="#{requestBean.drawerNumber}" required="true" 
         requiredMessage="Please enter drawer number">
        <f:ajax event="change" action="#{requestBean.generateRequestId}" 
            execute="@form" render="requestId"/>
    </h:inputText>

    <h:outputText value="Request Id" /> 
    <h:inputText id="requestId" value="#{requestBean.requestId}"  readonly="true" required="true" >
    </h:inputText>
</td>
<td>
    <h:message for="requestId"  style="color:red;font-size:10pt"/>
....

豆:

public void generateRequestId(ActionEvent e) 
{
    FacesContext context = FacesContext.getCurrentInstance();
    HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
    String emp=(String) session.getAttribute("loginUser");
    System.out.println("inside ajax event" + emp);
    try {
        requestId = AdminDAO.getRequestId(emp);
    } catch (ParseException e1) {
        e1.printStackTrace();
    }
}

メソッドが呼び出されると、リクエスト ID にレンダリングする必要があるリクエスト ID が生成されます。

このコードはメソッドを呼び出していません。<a4j:ajax代わりにを使用するとf:ajax、メソッドが存在しないことがわかります。

4

1 に答える 1

9

ここ、

<f:ajax event="change" action="#{requestBean.generateRequestId}" 
    execute="@form" render="requestId"/>

action属性が間違っています。と混同している可能性があります<h:commandButton action>listener代わりに属性が必要です。

<f:ajax listener="#{requestBean.generateRequestId}" 
    execute="@form" render="requestId" />

(属性を削除したことに注意してください。の場合、eventすでにデフォルトになっています)change<h:inputText>

そしてここ、

public void generateRequestId(ActionEvent e) 

ActionEvent議論は間違っています。と混同している可能性があります<h:commandButton actionListener>AjaxBehaviorEvent代わりに引数が必要です。

public void generateRequestId(AjaxBehaviorEvent e) 

何も必要ない場合は、必要に応じて完全に削除することもできます。オプションです。

public void generateRequestId() 

以下も参照してください。

于 2012-08-20T19:56:30.093 に答える