primefaces编辑对话框中的值未更新

时间:2013-06-10 12:44:15

标签: ajax jsf-2 primefaces

我有表Providers。我在primefaces datatable中显示表内容,并使用Jdbc和Tomcat 7.0对其执行创建,编辑和删除操作。

在编辑对话框中有保存和取消按钮。当我单击取消按钮并单击另一行的编辑按钮时,将显示上一行的值。

点击取消按钮后,我收到以下警告:

com.sun.faces.application.view.FaceletPartialStateManagementStrategy saveDynamicActions 警告:无法使用clientId'editproviderform:btnCancelProviders'保存动态操作,因为无法找到UIComponent

提供者表结构:

ProviderId, ProviderFirstName和 ProviderLastName

Providers.java

public class Providers implements Serializable {

private static final long serialVersionUID = 1L;
private Integer providerId;
private String providerFirstName;
private String providerLastName;

public Providers() {
}

public Providers(Integer providerId) {
    this.providerId = providerId;
}

public Providers(Integer providerId, String providerFirstName, String providerLastName) {
    this.providerId = providerId;
    this.providerFirstName = providerFirstName;
    this.providerLastName = providerLastName;
}

public Integer getProviderId()
{
    return providerId;
}

public void setProviderId(Integer providerId)
{
    this.providerId=providerId;
}

public String getProviderFirstName()
{
    return providerFirstName;
}

public void setProviderFirstName(String providerFirstName)
{
    this.providerFirstName=providerFirstName;
}

public String getProviderLastName()
{
    return providerLastName;
}

public void setProviderLastName(String providerLastName)
{
    this.providerLastName=providerLastName;
}

}

ProvidersBean.java

@ManagedBean(name = "providersBean")
@SessionScoped
public class ProvidersBean implements Serializable {

private Providers selectedProvider;

public Providers getSelectedProvider() {
    return selectedProvider;
}

public void setSelectedProvider(Providers selectedProvider) {
    this.selectedProvider = selectedProvider;
}
private Connection con;
@Resource(name = "jdbc/abc")
private DataSource ds;

public ProvidersBean() {
    try {
        Context ctx = new InitialContext();
        ds = (DataSource) ctx.lookup("java:comp/env/jdbc/ClinicalStudy");
    } catch (NamingException e) {
        e.printStackTrace();
    }
}

public void updateProvider() {
    try {
        con = ds.getConnection();
        PreparedStatement ps = con.prepareStatement("UPDATE Providers SET 
    ProviderFirstName=?,ProviderLastName=? WHERE ProviderId=?");
        ps.setString(1, selectedProvider.getProviderFirstName());
        ps.setString(2, selectedProvider.getProviderLastName());
        ps.setInt(3, selectedProvider.getProviderId());
        ps.executeUpdate();
        clearSelectedProvider();
        ps.close();
        con.close();
    } catch (SQLException e) {
        System.out.println("SQLException:" + e.getMessage());
    }
}

@PostConstruct
public void init()
{
    selectedProvider=new Providers();
}

public void clearSelectedProvider()
{
    selectedProvider = null;
}

public void close(CloseEvent event)
{
    event.getComponent().getChildren().clear();
    clearSelectedProvider();
}

}

编辑对话框代码

<p:dialog id="_EditProvider" header="Edit Provider" widgetVar="EditProvider" modal="true"
                  showEffect="fade" hideEffect="fade" resizable="false" position="center" 
                  appendToBody="true">
            <p:ajax event="close" listener="#{providersBean.close}"
                    update=":editproviderform" global="false"/>
            <h:form id="editproviderform">
                <p:panelGrid columns="2" rendered="#{not empty providersBean.selectedProvider}">

                    <h:outputLabel for="EdtProviderFirstName" value="ProviderFirstName*:"/>
                    <p:inputText id="EdtProviderFirstName" value="#{providersBean.selectedProvider.providerFirstName}"
                                 required="true" requiredMessage="FirstName must be entered" maxlength="30"
                                 validatorMessage="FirstName must be an alphanumeric value">
                        <f:validateRegex pattern="[a-zA-Z0-9\s]+"/>
                    </p:inputText>

                    <h:outputLabel for="EdtProviderLastName" value="ProviderLastName*:"/>
                    <p:inputText id="EdtProviderLastName" value="#{providersBean.selectedProvider.providerLastName}"
                                 required="true" requiredMessage="LastName must be entered" maxlength="30"
                                 validatorMessage="LastName must be an alphanumeric value">
                        <f:validateRegex pattern="[a-zA-Z0-9\s]+"/>
                    </p:inputText>

                    <p:commandButton id="btnUpdateProvider" value="Save" actionListener="#{providersBean.updateProvider()}" 
                                     update=":providersform:providersdt :providersmessages:messages" oncomplete="handleEditProviders(xhr,status,args)"/>
                    <p:commandButton id="btnCancelProviders" value="Cancel" actionListener="#{providersBean.clearSelectedProvider()}"  
                                     oncomplete="EditProvider.hide()"/>

                </p:panelGrid>
            </h:form>
        </p:dialog>

以下是数据表中编辑按钮的代码:

<p:column style="text-align: center;">
                    <p:commandButton id="btneditproviders" value="Edit" update=":editproviderform" oncomplete="EditProvider.show()" title="Edit">
                        <f:setPropertyActionListener value="#{item[0]}" target="#{providersController.selectedProvider}"/>
                    </p:commandButton>                        
                </p:column>

0 个答案:

没有答案