malformedXML:更新期间:accessForm:找不到passMessage

时间:2011-11-11 19:03:46

标签: ajax jsf malformed

我正在努力改进我的网络应用。我读了这篇文章http://balusc.blogspot.com/2011/01/jsf-20-tutorial-with-eclipse-and.html并试图实现一些ajax的东西(我是JSF和Ajax的新手)。

因此,第一个表单按预期工作,但当我传递到第二页时,消息 malformedXML:更新期间:accessForm:找不到passMessage 会显示在警告框中。

任何人都可以解释我为什么吗?

    <h:form id="accessForm">
        <h:panelGrid columns="3">
            <h:outputLabel for="user" value="Usuario:"
                           style="float: right" />
            <h:inputText id="user" value="#{userVerifier.username}"
                         required="true"
                         requiredMessage="Introduzca su nombre de usuario.">
                <f:ajax event="blur" render="userMessage" />
            </h:inputText>
            <h:message id="userMessage" for="user" style="color: #FF0000;" />

            <h:outputLabel for="pass" value="Contraseña:" 
                           style="float: right" />
            <h:inputSecret id="pass" value="#{userVerifier.password}"
                           required="true"
                           requiredMessage="Introduzca su contraseña." redisplay="true">
                <f:ajax event="blur" render="passMessage" />
            </h:inputSecret>
            <h:message id="passMessage" for="pass" style="color: #FF0000;" />

            <h:panelGroup />
            <h:commandButton value="  Entrar  " action="#{userVerifier.check}" 
                             style="float: right" >
                <f:ajax execute="@form" render="@form" />
            </h:commandButton>
            <h:messages globalOnly="true" layout="table" />
        </h:panelGrid>
    </h:form>

提前致谢。

更新

这是Bean代码:

@ManagedBean
@SessionScoped
public class UserVerifier{

    private String username;
    private String password;
    private String dependencia;
    private String tipoUsuario;
    private final Database db = new Database();

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getDependencia() {
        return dependencia;
    }

    public void setDependencia(String dependencia) {
        this.dependencia = dependencia;
    }

    public String getTipoUsuario() {
        return tipoUsuario;
    }

    public void setTipoUsuario(String tipoUsuario) {
        this.tipoUsuario = tipoUsuario;
    }

    public String check() {
        String isValidUser = db.checkUser(username, password);
        if (isValidUser.equals("T")) {
            dependencia = db.getDependencia(username, password);
            tipoUsuario = db.getTipoUsuario(username);
            System.out.println("tipoDepe: " + dependencia);
            System.out.println("tipoUser: " + tipoUsuario);
            if (dependencia != null && tipoUsuario != null) {
                return "upload-file";
            } else {
                setUsername("");
                setPassword("");
                return "index";
            }
        } else if (isValidUser.equals("F")) {
            setUsername("");
            setPassword("");
            return "index";
        } else {
            return "error-pnf";
        }
    }
}

1 个答案:

答案 0 :(得分:2)

此错误表示处理ajax请求时出现争用情况。动作方法的ajax请求发生在模糊验证的ajax请求之前。尝试将?faces-redirect=true添加到操作方法的导航结果值。那么JSF肯定会阻止队列中所有打开的ajax请求。

public String check() {
    // ...
    return "nextpage?faces-redirect=true";
}

在POST导航中使用(默认)转发是一种不好的做法,因为最终用户最终会在浏览器地址栏和不可收藏的页面中以未更改的URL结束。另请参阅When should I use h:outputLink instead of h:commandLink?