1

最初のページがログインページであるWebアプリケーションがあり、正しくログに記録されると、メインページが表示されます。ページにはタブ付きメニューがあり、タブの1つを初めてクリックすると、要求されたページに移動する代わりに、メインページが再度更新されます。これは最初のクリックでのみ発生します。それ以外の場合は、すべてが正常に機能します。

Firefox、Chrome、IE7でテキストメッセージを送信しましたが、この動作はIE7でのみ発生しました。なぜこれができるのでしょうか?エラーはどこにある可能性がありますか?質問を明確にするために、コードのどの部分をここにコピーすればよいかわからないためです。

PD:私はフィルターを使用し、メインページはBeanを使用してテーブルにデータを入力します。<redirect/>タグインも試してみましfaces-cofig.xmlたが、問題は解決しました。ただし、このページには、ログインページに含まれる「無効なユーザー」ポップアップが常に表示されていました。そして最後に、私はそれを捨てました。

いくつかのコードで更新

メインページに問題はないと思います。他のページに置き換えても動作は同じだからです...(更新2)しかし、単純なhtmlページでは問題なく動作します。

login.xhtml:

<h:form id="login">
    <h:outputText value="#{msg['login.user']}"/>
    <h:inputText value="#{LogBean.name}" required="true"/>
    <h:outputText value="#{msg['login.password']}"/>
    <h:inputSecret value="#{LogBean.pass}" required="true"/>
    <p:commandButton id="botonAccesoPrim"
                    value="#{msg['login.enter']}"
                    action="#{LogBean.checkLog}"
            oncomplete="dlg1.show();">
</p:commandButton>

<p:dialog id="popup" 
      visible="#{LogBean.popup}"
      widgetVar="dlg1"
      modal="true">  
          <h:outputText value="Invalid User." />  
</p:dialog> 

LogBean:

public class LogBean {

private String name;
private String pass;
private String validate = "";
private String popup = "false";

    //Getters, setters

public String checkLog() throws Exception {

    if (correctLog(md5Final)) {
        popup = "false";
        validate= "success";
        return validate;
    }
    else {
        popup = "true";
        validate = "fail";
        return validate;
    }
}

public boolean correctLog(String md5) throws SQLException {

    boolean correct = false;
    String sql = "SELECT ...";
    String passBBDD = null;

    cConexionOracle.conecta();
    ResultSet result = OracleConnection.query(sql);
    if (!(result.next()))
        return correct;
    else {
        passBBDD = result.getString("pass");
        if (md5.equals(passBBDD))
            correct = true;
    }
    OracleConnection.desconect();
    return correct;
}

public boolean isLogged () {
    return name != null;

}

faces-config:

    <managed-bean>
       <managed-bean-name>LogBean</managed-bean-name>  
       <managed-bean-class>LogBeanClass</managed-bean-class>  
       <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <managed-bean>
       <managed-bean-name>mainBean</managed-bean-name>  
       <managed-bean-class>MainBeanClass</managed-bean-class>  
       <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

<navigation-rule>
   <from-view-id>/HTML/login.xhtml</from-view-id>
   <navigation-case>
    <from-action>#{LogBean.checkLog}</from-action>
    <from-outcome>success</from-outcome>
    <to-view-id>/HTML/main.xhtml</to-view-id>
    <redirect/>
   </navigation-case>
   <navigation-case>
    <from-action>#{LogBean.checkLog}</from-action>
    <from-outcome>fail</from-outcome>
    <to-view-id>/HTML/login.xhtml</to-view-id>
   </navigation-case>
</navigation-rule>

FilterLogin:

public void doFilter (ServletRequest request, ServletResponse response,
                    FilterChain chain) throws IOException, ServletException {

    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse resp = (HttpServletResponse) response;

    if (req.getRequestURI().endsWith("login.jsf")) {
        chain.doFilter(req, resp);
        return;
    }

    HttpSession session = req.getSession(false);
    if (session != null) {
        LogBean BeanConnection = (LogBean) req.getSession().getAttribute("LogBean");
        if (BeanConnection != null && BeanConnection.isLogged()) {
            chain.doFilter(req, resp);
            return;
        }
    }
    resp.sendRedirect(req.getContextPath() + "/HTML/login.jsf");
}

web.xml

<filter>
  <filter-name>Filter</filter-name>
  <filter-class>FilterLogin</filter-class>
</filter>
<filter-mapping>
  <filter-name>Filter</filter-name>
  <url-pattern>/HTML/*</url-pattern>
</filter-mapping>

mainBean :(アップデート2)

private ArrayList<mainClass> mainList = new ArrayList<mainClass>();
private String name;
//...

//Getters, setters.

@PostConstruct
public void populateMainList() {

    String sql = null;
    if (name == null) {
        sql = "SELECT ...";
    }
    else
        sql = "SELECT ... LIKE '%"+name+"%'";

    OracleConnection.connect();
    ResultSet result = OracleConnection.query(sql);
    try {
        while(result.next()){
            mainClass main = new mainClass();           
            main.set...(result.getLong("someProperty"));
            mainList.add(main);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    OracleConnection.disconnect();
}

public ArrayList<mainClass> getMainList() throws SQLException {
    return mainList;
}

main.xhtml

<h:inputText id="search" value="#{mainBean.name}"> </h:inputText>
<h:commandButton id ="SubmitSearch" action="#{mainBean.seachButton}"></h:commandButton>    
<h:commandButton id ="new" value="New" action="#{sistemaBean.newButton}"> </h:commandButton>
<t:dataTable id="data" rows="1" value="#{mainBean.mainList}" var="item"
             width="95%" border="0" align="center" cellpadding="0" cellspacing="0">
   <t:column width="42%">
      <f:facet name="header">
         <h:outputText value="Name"/>
      </f:facet>
      <h:commandLink value="#{item.shortName}" action="#{detailledMainBean.mainDetail}">
        <f:param name="idMain" value="#{item.idMain}"/>
      </h:commandLink>
   </t:column>
   <t:column>
      <f:facet name="header">
         <h:outputText value="Description"/>
      </f:facet>
      <h:outputText value="#{item.description}"/>
   </t:column>
</t:dataTable>
<t:dataScroller id="scroller" for="data"
                paginator="false" paginatorMaxPages="5"
                paginatorColumnClass="style"
                immediate="true"
                pageCountVar="pageCount" pageIndexVar="pageIndex"
                disableFacetLinksIfFirstPage="true"
                disableFacetLinksIfLastPage="true"
                renderFacetLinksIfFirstPage="false"
                renderFacetLinksIfLastPage="false"
                paginatorRenderLinkForActive="false"
                renderFacetsIfSinglePage="false"
                displayedRowsCountVar="true">   
   <f:facet name="previous">
      <t:outputText styleClass="style" value=" &laquo; Previous | "/>
      <t:outputText styleClass="style" value="Page #{pageIndex} / #{pageCount}"/>
   </f:facet>
   <f:facet name="next">
      <t:outputText styleClass="style" value=" | Next &raquo;"/>
   </f:facet>
</t:dataScroller>

前もって感謝します。

4

1 に答える 1

0

IE7 と jsf 2 ではさまざまな問題が発生します。この問題は特に発生していませんが、他の多くの問題が発生しています。

私たちの問題は主にテーブルに要約されました。JSF は非常にテーブル中心であり、多くのコンポーネントが 1 つまたは複数のテーブルを含む html に変換されます。たとえば、通常、整列のために追加の css を使用する必要がありました。

一部のテーブルでは、テーブル ヘッダーの幅を JavaScript で設定する必要がありました。問題は、ヘッダーの幅を決定できなかったため、IE7 がテーブルを壊したことでした。

これから何か手がかりを引き出すことができるかどうかはわかりません。ただし、「コードの何が問題なのか」ではなく、回避策の観点から考えることをお勧めします。

于 2012-04-18T18:07:30.247 に答える