f:不调用ajax action方法

use*_*507 3 ajax richfaces jsf-2

我正在使用带有丰富面孔的JSF2 4.我的目标是使用ajax将后端中的方法生成的请求ID显示到输入文本字段中.

这是我的代码片段:


....
    <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"/>
....
Run Code Online (Sandbox Code Playgroud)

豆:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

一旦调用该方法,它将生成一个请求ID,需要将其呈现回请求ID.

这段代码甚至没有调用方法,如果我用<a4j:ajax而不是f:ajax,它告诉我方法不存在.

Bal*_*usC 9

这里,

<f:ajax event="change" action="#{requestBean.generateRequestId}" 
    execute="@form" render="requestId"/>
Run Code Online (Sandbox Code Playgroud)

action属性是错误的.你可能会混淆<h:commandButton action>.您需要该listener属性.

<f:ajax listener="#{requestBean.generateRequestId}" 
    execute="@form" render="requestId" />
Run Code Online (Sandbox Code Playgroud)

(请注意,我删除了该event属性;它已默认为change以防万一<h:inputText>)

和这里,

public void generateRequestId(ActionEvent e) 
Run Code Online (Sandbox Code Playgroud)

这个ActionEvent论点是错误的.你可能会混淆<h:commandButton actionListener>.你需要AjaxBehaviorEvent参数.

public void generateRequestId(AjaxBehaviorEvent e) 
Run Code Online (Sandbox Code Playgroud)

如果您不需要任何东西,如果有必要,您也可以完全删除它.这是可选的.

public void generateRequestId() 
Run Code Online (Sandbox Code Playgroud)

也可以看看: