最初のページがログインページである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=" « Previous | "/>
<t:outputText styleClass="style" value="Page #{pageIndex} / #{pageCount}"/>
</f:facet>
<f:facet name="next">
<t:outputText styleClass="style" value=" | Next »"/>
</f:facet>
</t:dataScroller>
前もって感謝します。