f:ajax只发射一次

时间:2017-01-27 14:20:55

标签: ajax jsf

我有一个从我的数据库加载列表的表单。我可以更新,并删除我选择的行,这是正常的。现在我为每一行添加了一个启动和停止按钮,以便从另一个应用程序启动引擎。现在我要做的是当我点击开始时,我的引擎将基于该行开始,该行将隐藏开始按钮并显示停止按钮。

我在行中的那些列上实现了ajax,但它一次更新所有行,而ajax只触发一次。

我在这里做错了什么,你能告诉我按下开始然后隐藏我的开始按钮并显示我的停止按钮或按下停止并隐藏我的停止按钮并显示我的开始按钮的最佳方式在那一行。

我的managedbean中的代码片段

@ManagedBean
@SessionScoped
public class HibernateController {
    private ArrayList<IPAddress> ipAddresses;
    private Logger logger = Logger.getLogger(getClass().getName());
    private boolean isStarted = false;
    private boolean isStopped = true;

public HibernateController(){
        ipAddresses = new ArrayList<IPAddress>();
    }


public boolean engineIsStarted() {

        return isStopped;

    }

    public boolean engineIsStopped() {
        return isStarted;
    }

    public void startEngine(AjaxBehaviorEvent event){
        System.out.println("I am here and started");
        isStarted = true;
        isStopped = false;
    }

    public void stopEngine(AjaxBehaviorEvent event){
        System.out.println("I am here and stopped");
        isStopped = true;
        isStarted = false;
    }

我的xhtml中的代码片段

<h:form>

        <h:dataTable value="#{hibernateController.ipAddresses}" var="tempAddress"
            styleClass="demo-table" 
            headerClass="demo-table-header"
            rowClasses="demo-table-odd-row,demo-table-even-row">

            <h:column>
                <!-- the column header -->
                <f:facet name="header">IP Adress</f:facet>

                <!--  the value for each row -->
                #{tempAddress.ipAddress}
            </h:column>

            <h:column>
                <!-- the column header -->
                <f:facet name="header">Port Number</f:facet>

                <!--  the value for each row -->
                #{tempAddress.portNumber}
            </h:column>



            <h:column>
                <!-- the column header -->
                <f:facet name="header">Action</f:facet>

                 <!-- the value for each row -->
                <h:commandLink value="Update"
                    action="#{hibernateController.loadAddress(tempAddress.id)}"/>
                |

                <h:commandLink value="Delete"
                    onclick="if (!confirm('Are you sure you want to delete this address?')) return false"
                    action="#{hibernateController.deleteAddress(tempAddress.id)}"/>

            </h:column>

            <h:column>
                <h:commandButton id="startButton" value="start" rendered="#{hibernateController.engineIsStarted()}">
                    <f:ajax event="click" execute="@this" listener="#{hibernateController.startEngine}" render="@all" />
                </h:commandButton>

                <h:commandButton id="stopButton" value="stop" rendered="#{hibernateController.engineIsStopped()}">
                     <f:ajax event="click" execute="@this" listener="#{hibernateController.stopEngine}" render="@all" />
                </h:commandButton>
            </h:column> 

        </h:dataTable>

        </h:form>

Image of interface now

0 个答案:

没有答案