1

PrimeFaces DataTableがあり、各行にはsavedelete、および別のcommandButtonがあります。dataTableにはとがselectionMode="single"ありrowSelectListenerます。コマンドボタンをクリックすると、が起動されますrowSelectListenerが、commandButtonのアクションが起動されません。

何をすべきか?両方発射する必要があります!

immediate="true"dataTableの外に送信する必要のあるフォームフィールドがあるため、使用できません。immediate="true"コマンドボタンに追加して動作します。

Primafacesバージョン:2.2.1 JSFバージョン:2.0.3

リードありがとうございます!

コード:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
            xmlns:ui="http://java.sun.com/jsf/facelets"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:f="http://java.sun.com/jsf/core"
            xmlns:v="http://java.sun.com/jsf/composite/composite"
            xmlns:p="http://primefaces.prime.com.tr/ui">
    <h:form id="contractReasonAddFormId">
            <span class="error">
                <h:messages /> 
            </span>
    <h:panelGrid columns="2" cellspacing="5" >
        <h:outputLabel class="label" value="#{resourceBundle.coAddReason_coStatus_label_Key}" />
        <h:outputText class="output" value="#{selectedContractService != null ? selectedContractService.COS_STATUS_DESC : contract.CO_STATUS_DESC}" />
        <h:outputLabel class="label" for="reasonId" value="#{resourceBundle.contractChangeStatus_NewReason_Key}:" />
        <h:selectOneMenu id="reasonId" value="#{bbNewStatusReason.selectedString}" required="true" requiredMessage="#{resourceBundle.contractChangeStatus_NewReason_Key} #{resourceBundle.valueIsRequired}">
            <f:selectItem itemValue="" itemLabel="- #{resourceBundle.contractChangeStatus_SelectReason_Key} -" />
            <f:selectItems value="#{bbNewStatusReason.list}" var="r" itemValue="#{r.REASON}" itemLabel="#{r.RS_DES}" />
        </h:selectOneMenu>
    </h:panelGrid>
    <!-- some other form fields --->
    <h:panelGrid>
        <p:dataTable 
        id="currentStatusReasonTable" 
        value="${bbCurrentStatusReason.list}" 
        var="currStReason"
        selectionMode="single"
        selection="#{bbCurrentStatusReason.selectedItem}"
        rowSelectListener="#{contractAddReasonAction.selectReason}" onRowSelectUpdate="reasonValidityTimes"         
        >
            <p:column sortBy="#{currStReason.RS_DES}" headerText="#{resourceBundle.coAddReason_currStReason_label_Key}">
                <h:outputText value="#{currStReason.RS_DES}: "/>
            </p:column>
            <!-- Other columns -->
            <p:column headerText="#{resourceBundle.coAddReason_action_facet_Key}">
                <p:commandButton id="updateReasonId" action="dlgUpdate" image="ui-icon ui-icon-pencil" title='#{resourceBundle["button.save"]}' disabled="#{selectedContractService != null ? currStReason.LEVEL == 'C' : false}" >
                    <f:setPropertyActionListener target="#{bbCurrentStatusReason.selectedItem}" value="#{currStReason}" />
                </p:commandButton>
                <p:commandButton id="deleteReasonId" action="dlgDelete" image="ui-icon ui-icon-circle-minus" title='#{resourceBundle["button.delete"]}' disabled="#{selectedContractService != null ? currStReason.LEVEL == 'C' : false}" >
                    <f:setPropertyActionListener target="#{bbCurrentStatusReason.selectedItem}" value="#{currStReason}" />
                </p:commandButton>
                <p:commandButton id="generateDeleteDocumentsId" action="generateDeleteDocuments" image="ui-icon" title='#{resourceBundle["button.generateDocumentsForDel"]}' immediate="true" rendered="#{showPrintDocument != null}" >
                    <f:setPropertyActionListener target="#{bbCurrentStatusReason.selectedItem}" value="#{currStReason}" />
                </p:commandButton>
            </p:column>

        </p:dataTable>

    </h:panelGrid>
    </h:form> 
</ui:composition>
4

3 に答える 3

1

私はこれと同じ問題を抱えていました。私が commandButton で使用したのは、onclick 属性内の event.stopPropagation() でした。これが私の削除ボタンです。

<p:commandButton icon="ui-icon-trash"
                             onclick="connDelConfirm.show(); event.stopPropagation();" 
                             actionListener="#{connectionController.setSelectedConnection(connection)}"
                             disabled="#{connection.deleted}"/>

onclick 属性の他のアクションは、削除アクションの確認ダイアログを開きます。イベントの伝播が停止されたため。選択したアイテムを削除するように設定する方法が必要でした。これは、アクション リスナーによって実現されました。Bean で setSelectedItem メソッドを呼び出し、dataTable から「var」属性を渡しただけです。

于 2012-10-17T15:26:06.790 に答える
0

回答ありがとうございます。しかし、私が直面していた問題の根本的な原因は、まったく別のものであることが判明しました。

何が起こっていたのかというと、アクションは正常にトリガーされていましたが、'required = true'のjsf要素があり、これにより、コンソールでも表示されない検証エラーがスローされていました。ページレイアウトのペインを表示するエラーメッセージを更新した後(primafaceコマンドボタン、ajax-'update ='属性を使用)、エラーメッセージが表示されました。

ありがとう、Rajarshi Mukherjee

于 2012-10-25T08:11:58.427 に答える
0

で入力コンポーネントにコンポーネント バインディングを使用しますimmediate="true"

を使用して、入力コンポーネントアクション コンポーネントの間で遊ぶ必要がありますimmediate="true"

のJSF ライフサイクル効果を参照する必要がありimmediate="true"ます。

BeanOne.java

@ManagedBean(name="BeanOne")
@RequestScoped
public class BeanOne {
    private HtmlInputText inputText;

    public HtmlInputText getInputText() {
        return inputText;
    }

    public void setInputText(HtmlInputText inputText) {
        this.inputText = inputText;
    }

    public void show() {
        System.out.println("HtmlInputText ==>" + inputText.getValue());
    }
}

pageOne.xthml

<h:inputText binding="#{BeanOne.inputText}" immediate="true"/><br/>
<h:commandButton value="Show_1" action="#{BeanOne.show}" immediate="true"/>
<h:commandButton value="Show_2" action="#{BeanOne.show}"/>
于 2012-10-17T11:31:42.553 に答える