2017-02-06 13 views
0

P: commandLink или p: commandButton внутри сотового отправителя p: datagrid не работает, когда я нажимаю командуLink, он перенаправляет меня на ту же страницу. Внутри celleditor commandLink не может найти своего слушателя, однако, когда я выхожу за пределы клеточного конвейера, он работает отлично.P: commandLink внутри p: datagrid p: celleditor не работает

<h:form id="form"> 

    <p:growl id="msgs" showDetail="true"/> 
        <p:dataTable id="project" var="car" value="#{editdeleteview.proj_rec}" rowKey="#{car.id}" selection="#{editdeleteview.selected_rec}" selectionMode="single" editable="true" style="margin-bottom:20px"> 
       <f:facet name="header"> 
        All Projects 
       </f:facet> 

       <p:ajax event="rowEdit" listener="#{editdeleteview.onRowEdit}" update=":form:msgs"/> 
       <p:ajax event="rowEditCancel" listener="#{editdeleteview.onRowCancel}" update=":form:msgs"/> 

       <p:column headerText="ID"> 

         <h:outputLabel value="#{car.id}" /> 


       </p:column> 
       <p:column headerText="Title"> 
       <p:commandLink ajax="false" action="#{editdeleteview.openObjects(car)}" ><h:outputText value="#{car.title}" /></p:commandLink> 
        <p:cellEditor> 
         <f:facet name="output"><p:commandLink ajax="false" action="#{editdeleteview.openObjects(car)}" ><h:outputText value="#{car.title}" /></p:commandLink></f:facet> 
         <f:facet name="input"><p:inputText value="#{car.title}" style="width:100%"/></f:facet> 
        </p:cellEditor> 
       </p:column>     
       <p:column headerText="Description"> 
        <p:cellEditor> 
         <f:facet name="output"><h:outputText value="#{car.description}" /></f:facet> 
         <f:facet name="input"><p:inputText value="#{car.description}" style="width:100%"/></f:facet> 
        </p:cellEditor> 
       </p:column> 
       <p:column headerText="Insertion Time"> 
        <p:cellEditor> 
         <f:facet name="output"><h:outputText value="#{car.insertionTimestamp}" /></f:facet> 
         <f:facet name="input"><p:inputText value="#{car.insertionTimestamp}" style="width:100%"/></f:facet> 
        </p:cellEditor> 
       </p:column> 
       <p:column headerText="Close Time"> 
        <p:cellEditor> 
         <f:facet name="output"><h:outputText value="#{car.closeTimestamp}" /></f:facet> 
         <f:facet name="input"><p:inputText value="#{car.closeTimestamp}" style="width:100%"/></f:facet> 
        </p:cellEditor> 
       </p:column> 



       <p:column headerText="Edit" style="width:50px"> 
        <p:rowEditor /> 
       </p:column> 
       <p:column headerText="Delete"> 
        <p:commandButton id="downloadLink1" value="Delete" ajax="false" class="btn btn-danger" icon="ui-icon-trash" action="#{editdeleteview.delete(car)}"> 

        </p:commandButton> 
       </p:column>     
      </p:dataTable>    

    </h:form> 

р-: commandLink вне celleditor под заголовком столбца работает отлично, но внутри celleditor commandLink не работает, слушатель в бобе

public String openObjects(Project p) 
{ 


    HttpSession session = SessionUtils.getSession(); 
    session.setAttribute("project_id", p.getId()); 
    session.setAttribute("project_title", p.getTitle()); 
    //session.setAttribute("project_title", "Hamdan"); 
    System.out.println("EditView: "+session.getAttribute("project_title").toString()); 
    return "Objects.xhtml"; 

} 

Я также попытался это commandLink in cellEditor doesn't trigger action/actionListener но это не сработало для меня. Любая помощь будет высоко оценена.

+0

'не работает' является способ расплывчатым. Один из ваших других вопросов отмечен как дубликат somthing. Этот дубликат содержит информацию о том, как отлаживать дальше. Пожалуйста, сделай. – Kukeltje

+0

@Kukeltje Я также пробовал их, я упомянул о том, что commandlink внутри cellEditor под заголовком «title» не вызывает его прослушиватель и просто перенаправляет на ту же страницу без какой-либо ошибки. –

+0

@Kukeltje commandLink вне тега cellEditor работает отлично, но я хочу, чтобы командаLink внутри cellEditor работала. –

ответ

0

Попробуйте установить immediate="true" на свой компонент командной строки. Посмотрите на это объяснение по @BalusC:

Trying to understand immediate="true" skipping inputs when it shouldn't

+0

Команда commandButton вне cellEditor работает, поэтому, если это решение, было бы полезно объяснить, почему в контексте cellEditor это ** необходимо ** и ** не ** прямо за его пределами. – Kukeltje

+0

Я предлагаю это как решение, если оно работает. На самом деле я этого не пробовал. Но я думаю, что это решает проблему, потому что запрос commandLink внутри cellEditor может быть обусловлен собственными событиями или запросами ячеек cellEditor. @Kukeltje Не стесняйтесь голосовать, если ответ не соответствует правилам. Никаких жестких чувств. :) –

+1

Нет, без нисходящего потока, так как я не знаю, помогает ли это или нет. Но если вы не пробовали, лучше опубликуйте короткие вещи, подобные этому, в качестве комментария в следующий раз и включите его в ответ, если это поможет. «Process =» этот «ответ» в вопросе решает или должен решить то, что вы описываете – Kukeltje

0

просто использовать это, и это будет работать

<f:facet name="output"> 
          <p:commandLink action="#{editdeleteview.openObjects(car)}" 
           process="@this" immediate="true"> 
           <h:outputText value="#{car.title}" /> 
           <f:setPropertyActionListener 
            target="#{editdeleteview.selected_rec}" value="#{car}" /> 
          </p:commandLink> 
         </f:facet>