无法从返回值导航到目录和查看页面

问题描述 投票:0回答:1

我在理解为何无法从registrationFlow导航到受保护目录时遇到问题。在我的应用程序中,在index.html中有一个按钮,可将用户重定向到注册表单(这是一个流程)。这是用户选择是否要登录或注册新用户的部分。我的文件夹结构是:

  1. 网页
    • index.xhtml
    • 受保护的目录
      • mainPage.xhtml
    • 注册目录
      • registration.xhtml
      • addClients.xhtml
<h:form>
            <h:commandButton class="formButton" value="Zaloguj" action="/Login?faces-redirect=true"/>
            <h:commandButton class="formButton" value="Zarejestruj się" action="registration" immediate="true"/>
        </h:form>

我有一个registrationFlow.xml文件,该文件定义了行为如何从页面重定向到页面

<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.2"
              xmlns="http://xmlns.jcp.org/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
    <flow-definition id="registration">
        <view id="registration">
            <vdl-document>/registration/registration.xhtml</vdl-document>
        </view>
        <flow-return id="Cancel">
            <from-outcome>
                /index
            </from-outcome>
        </flow-return>
        <flow-return id="saveClient">
            <from-outcome>
                /protected/mainPage
            </from-outcome>
        </flow-return>
    </flow-definition>
</faces-config>

我的registration.xhtml文件

<h:body>
        <p>
                #{ null != facesContext.application.flowHandler.currentFlow}
            #{facesContext.application.flowHandler.currentFlow.id}
        </p>
        <div class="registerContainer">
            <div class="formContainer">
                <h:form id="registerForm" class="registerForm">
                    <h:outputText value="Username "/>
                    <h:inputText id="username" value="#{registration.username}"></h:inputText>

                    <h:outputText value="Password "/>
                    <h:inputSecret id="password" value="#{registration.password}"></h:inputSecret>

                    <h:outputText value="Firstname "/>
                    <h:inputText id="first" value="#{registration.first}"></h:inputText>

                    <h:outputText value="Lastname "/>
                    <h:inputText id="last" value="#{registration.last}"></h:inputText>

                    <h:outputText value="Email "/>
                    <h:inputText id="email" value="#{registration.email}"></h:inputText>
                    <h:commandButton id="register" action="#{registration.register}" value="Zarejestruj" style="margin: 15px auto; width: 35%; "></h:commandButton>
                    <h:commandButton action="Cancel" value="Anuluj" style="margin: 15px auto; width: 35%; "></h:commandButton>
                    <h:messages for="register"/>
                </h:form>
            </div> 
        </div>
    </h:body>

addClients

<h:body>
        <h1>Add clients to registered user</h1>
        <p>
                #{ null != facesContext.application.flowHandler.currentFlow}
            #{facesContext.application.flowHandler.currentFlow.id}
        </p>
        <h:form id="clientsForm">
            <c:forEach items="#{clientManagement.clientsList}" var="client">
                <h:outputText value="Client Name"/>
                <h:inputText id="clientName" value="#{client.name}"></h:inputText>
                <h:outputText value="Client company name" />
                <h:inputText id="clientCompany" value="#{client.companyName}"></h:inputText>
                <h:outputText value="Website" />
                <h:inputText id="clientWebsit" value="#{client.website}"></h:inputText>
                <h:outputText value="Client Email"/>
                <h:inputText id="clientEmail" value="#{client.clientEmail}"></h:inputText> <br></br><br></br>          
            </c:forEach>
            <h:commandButton value="Add client" action="#{clientManagement.addClients()}" immediate="true">
                <f:ajax execute="@form" render="clientsForm" /> 
            </h:commandButton>
            <h:commandButton id="saveClients" value="Save clients" action="#{clientManagement.saveClient}">
            </h:commandButton><br></br>
            <h:messages for="saveClients"/>
        </h:form>
    </h:body>

也是最后一个文件-ClientManagement.java文件,用于验证传递的电子邮件,为客户端创建新表格并将从addClients.xhtml传递的客户端列表保存到数据库。 这是我不知道为什么它不起作用的地方。在方法saveClient中,如果所有内容都保存了,我想将用户重定向到路径../protected/mainPage.xhtml,但它不起作用。

@Named
@ViewScoped
public class ClientManagement implements Serializable {

    private List<Client> clientsList = new ArrayList<Client>();
    private List<String> clientsEmail;
    private List<Client> allClients;
    private User loggedUser;

    @Inject
    private ClientFacade clientDAO;

    @PostConstruct
    public void init() {       
        HttpSession session = SessionUtil.getSession();
        User user = (User) session.getAttribute("user");
        loggedUser = user;
        System.out.println(loggedUser);
    }   

    public Boolean validateEmail(String email) {
        String regex = "^[\\w-_\\.+]*[\\w-_\\.]\\@([\\w]+\\.)+[\\w]+[\\w]$";
        return email.matches(regex);
    }

    public void delete(Client client) {
        clientDAO.remove(client);
    }

    public void addClients() {
        clientsList.add(new Client());
    }

    public String saveClient() {
        try {
            clientsList.forEach((client) -> {
                boolean validateEmail = validateEmail(client.getClientEmail());
                if (validateEmail) {
                    Client newClient = new Client();
                    newClient.setName(client.getName());
                    newClient.setCompanyName(client.getCompanyName());
                    newClient.setWebsite(client.getWebsite());
                    newClient.setClientEmail(client.getClientEmail());
                    newClient.setUserid(loggedUser);
                    try {
                        clientDAO.add(newClient);
                    } catch (Exception e) {
                        throw new Error(e);
                    }
                } else if (validateEmail == false) {
                    FacesContext ctx = FacesContext.getCurrentInstance();
                    ctx.addMessage("clientsForm:saveClients", new FacesMessage("Provided email is invalid." + client.getClientEmail()));
                }
            });            
        } catch (Error e) {
            throw new Error(e);
        }
        FacesContext ctx = FacesContext.getCurrentInstance();
        ctx.addMessage( "clientsForm:saveClients", new FacesMessage("Successfully added clients"));
        return "mainPage";
    }



  // getters and setters

}

[我也曾尝试排除registrationFlow.xmlsaveClient方法返回页中的内容,但效果不佳。

jsf flow-scope
1个回答
0
投票

所以我找到了答案。我没有看到服务器在控制台 Unable to set request character encoding to UTF-8 from context myApp ...中发出警告,这就是问题所在。如果有人遇到相同的问题,我会发布一个链接作为答案。answer here

© www.soinside.com 2019 - 2024. All rights reserved.