【问题标题】:CommandButon 's actionListener not workingCommandButton 的 actionListener 不起作用
【发布时间】:2013-04-23 21:44:34
【问题描述】:

在我选择 h:selectOneMenu 中的项目后,不会调用 commandButton 中的 Mi actionListener,只有当我在 selectOneMenu 中没有任何选择的情况下按下按钮时才有效 下面你可以看到我的代码:

<h:form id="formBtnBusquedaAnomalias">
                <table>
                    <tr>

                        <td>
                                <h:outputLabel id="idEstatusAnomalias" value="Estatus anomalias." />                                     
                                <h:selectOneMenu id="selectOneMenuEstatusAnomalias" 
                                    value = "#{busquedaAnomaliasManageBean.selectedEstatusAnomaliaVO}" >
                                    <f:converter converterId="estatusAnomaliaConverter"/>
                                    <f:selectItem itemLabel="Select one" />
                                    <f:selectItems value="#{busquedaAnomaliasManageBean.lstEstatusAnomaliaVOs}" var="estatusAnomalia"
                                        itemLabel="#{estatusAnomalia.descripcionEstatusAnomalia}" />
                                </h:selectOneMenu>                      
                        </td>

                    </tr>
                    <tr>
                        <td>    
                            <p:commandButton value="Buscar anomalias."
                                    actionListener="#{busquedaAnomaliasManageBean.buscarAnomalias()}" />
                        </td>
                    </tr>
                </table>
            </h:form>

转换器类:

@FacesConverter(value = "estatusAnomaliaConverter")
public class EstatusAnomaliaConverter implements Converter{

@Override
public Object getAsObject(FacesContext ctx, UIComponent component, String value) {
    EstatusAnomaliaVO estatusAnomaliaVO = new EstatusAnomaliaVO();
    estatusAnomaliaVO.seDescripcionEstatusAnomalia(value);
    return estatusAnomaliaVO;
}

@Override
public String getAsString(FacesContext ctx, UIComponent component, Object object) {
    String temp = "";
            if(!object == null)
            {
                 temp = object.toString();
            }
    return temp;
}

}

管理豆:

@ManagedBean(name=ConstantesManageBeans.MANAGE_BEAN_BUSQUEDA_ANOMALIAS)
@RequestScoped
public class BusquedaAnomaliasManageBean implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = -1955257440354260445L;


public void buscarAnomalias(){
             //...some code here
}
]

【问题讨论】:

    标签: java jsf converter selectonemenu commandbutton


    【解决方案1】:

    您的 buscarAnomalias 方法不遵循 ActionListener 方法的签名。这是签名:

    public void actionListener(ActionEvent event) {
        // ...
    }
    

    为了使其工作,只需将ActionEvent 参数添加到您的方法中:

    public void buscarAnomalias(ActionEvent event) {
        //...some code here
    }
    

    如果我是你,我会使用 action 而不是 actionListener 来执行托管 bean 操作:

    <p:commandButton value="Buscar anomalias."
       action="#{busquedaAnomaliasManageBean.buscarAnomalias()}" />
    

    请注意,使用这种方法,您无需将ActionEvent event 参数添加到您的方法中。

    更多信息:

    您的代码中的另一个问题是您的FacesConverter 在检索所选项目的值时失败。这是因为你没有在你的&lt;f:selectItems&gt; 中设置itemValue

    <h:selectOneMenu id="selectOneMenuEstatusAnomalias" 
        value="#{busquedaAnomaliasManageBean.selectedEstatusAnomaliaVO}">
        <f:converter converterId="estatusAnomaliaConverter"/>
        <f:selectItem itemLabel="Select one" />
        <f:selectItems value="#{busquedaAnomaliasManageBean.lstEstatusAnomaliaVOs}"
             var="estatusAnomalia" itemValue="#{estatusAnomalia}"
             itemLabel="#{estatusAnomalia.descripcionEstatusAnomalia}" />
    </h:selectOneMenu>
    

    【讨论】:

    • 此限制不再存在:javaserverfaces.java.net/nonav/docs/2.0/pdldocs/facelets/h/…。可能也取决于 OP 的 JSF 版本
    • @kolossus 你的链接坏了吗?我尝试访问,但它只显示一个空白页面并继续加载。
    • 我自己都不敢相信,但链接似乎在一夜之间就死了。试试这个javaserverfaces.java.net/nonav/docs/2.0/vdldocs/facelets/h/…
    • @Luiggi Mendoza 我在您的回答中进行了更改,但同样的错误仍在继续。让我更好地解释一下:当我按下按钮时,操作方法 buscarAnomalias() 工作正常,然后当您在 selectOneMenu 中选择一个项目并再次按下按钮时,操作方法没有任何作用
    • @Aredalo 我还加了一个关于&lt;h:selectOneMenu&gt;的部分,你试过了吗?
    猜你喜欢
    • 2015-08-29
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多