JSF CommandButton显示/隐藏问题

时间:2012-07-17 14:13:21

标签: jsf-2 primefaces

我使用了一个primefaces FieldSet组件,并在字段集中指定了一个按钮字段。我有一个要求,当我点击命令按钮时,h:selectonemenu&应显示一个inputtext,并在进一步单击时隐藏h:selectOnemenu& inputtext。下面是我写的代码和显示的代码。隐藏。节目部分工作正常。但是,当我尝试单击按钮隐藏时,它不起作用。

xhtml代码

<h:panelGrid id="grid1" columns="3">
    <p:fieldset id="GlobalAdjustment" legend="GlobalAdjustment"  style="font-size:12px !important;width:30%" >
    <h:commandButton  id="globalAdjustID"  image="#{review.imageUrl}" actionListener="#{review.showUpdateList}" />  
    </p:fieldset>

    <h:selectOneMenu id="SelectID"   value="#{review.reviewList}"  rendered="#{demandReview.selectoneRenderer}">
        <f:selectItems id="FilterSelectListID"   value="#{review.reviewListIDs}" style="font-size:12px !important"></f:selectItems>
    </h:selectOneMenu>
    <h:inputText id="fieldUpdateID" required="false" rendered="#{review.inputTextRenderer}"></h:inputText>
</h:panelGrid>

ManagedBean ActionListener方法

public void showUpdateList(ActionEvent event)
{
    System.out.println("entering the Action Method:");
    Map<String, Object> idMap = new HashMap<String, Object>() ;
    idMap = event.getComponent().getAttributes();
    String url = (String) idMap.get("image");
    System.out.println("The url is :"+url);
    if(url.equals("/images/add_data_button.png")){
        //upbean.setImageUrl("/images/remove_data_button.png") ;
        imageUrl ="/images/remove_data_button.png" ;
        selectoneRenderer = true;
        inputTextRenderer = true;
    }else
    {
        imageUrl ="/images/add_data_button.png" ;
        selectoneRenderer = false;
        inputTextRenderer = false;
    }
}

当我第一次单击字段集内的命令按钮时,它工作正常并显示selectoneMenu&amp;文本框。进一步单击后,不会调用ActionListener。请帮我解决这个问题。

由于

2 个答案:

答案 0 :(得分:1)

您可以尝试其他方法。使用p:commandButton和更新属性,如下所示:

<h:panelGrid id="grid1" columns="3">
    <p:fieldset id="GlobalAdjustment" legend="GlobalAdjustment"  style="font-size:12px !important;width:30%" >
    <p:commandButton  id="globalAdjustID"  image="#{review.imageUrl}" actionListener="#{review.showUpdateList}" update="grid1"/>  
    </p:fieldset>

    <h:selectOneMenu id="SelectID"   value="#{review.reviewList}"  rendered="#{demandReview.selectoneRenderer}">
        <f:selectItems id="FilterSelectListID"   value="#{review.reviewListIDs}" style="font-size:12px !important"></f:selectItems>
    </h:selectOneMenu>
    <h:inputText id="fieldUpdateID" required="false" rendered="#{review.inputTextRenderer}"></h:inputText>
</h:panelGrid>

这样你就可以使用部分处理,面板内部组件的条件渲染将通过AJAX完成。

此外,检查服务器的控制台以查看队列中是否有任何未显示的消息是个好主意。

答案 1 :(得分:0)

请求是否指定使用服务器端?对于这样的事情,我认为一个简单的Javascript脚本会更适合。

例如,使用jQuery库执行以下操作:

<h:commandButton id="xyz" onclick="$('#elementId').toggle();"/>