سؤال

النموذج لا يخضع للفول.

login.xhtml

<h:form>
    <p:panel header="Login">  
        <p:messages id="msgs" showDetail="true"/>
        <h:panelGrid columns="2" columnClasses="column" cellpadding="5">
            <h:outputLabel for="user" value="Username" />
            <h:inputText id="user" value="#{login.username}" />

            <h:outputLabel for="pw" value="Passwort" />
            <h:inputSecret id="pw" redisplay="false" value="#{login.password}" />
        </h:panelGrid>
        <p:button value="Anmelden" action="#{login.login}" type="submit" />
    </p:panel>
</h:form>

Login.java

@ManagedBean
@ViewScoped
public class Login {

    private FacesContext fCtx;
    private String username;
    private String password;

    public Login() {
        fCtx = FacesContext.getCurrentInstance();
    }

    public String login(){
        HttpSession session = (HttpSession) fCtx.getExternalContext().getSession(false);
        String sessionId = session.getId();
        fCtx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Info: ", getUsername()+", "+getPassword()+", "+sessionId));  

        return "login.xhtml";
    }


    public void setUsername(String username) {
        this.username = username;
    }
    public String getUsername() {
        return username;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getPassword() {
        return password;
        }
    }

لا توجد استثناءات في السجلات. ما هي المشكلة وكيف يمكنني إصلاحها؟

هل كانت مفيدة؟

المحلول

ال <p:button> لا يقوم بإرسال نموذج الأصل ، إنه مجرد خطاف لتتمكن من تنفيذ بعض رمز JS على زر اضغط دون نية إرسال أي نموذج نشر. استبدله <p:commandButton>. أيضا ، تريد إضافة update="msgs" لتحديث المكون مع id="msgs" بعد إرسال.


لا علاقة لمشكلة ملموسة ، فأنت لا تريد استخدامها getSession(false) لأنه قد يعود null. فقط استخدم getSession(true).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top