初学JSF,哈哈,有个问题很困扰。我有个COMMONBUTTON,他的代码如下:<h:commandButton value="连接源数据库" id="startbtcon" action="#{StartdbCon.startconact}" immediate="false"></h:commandButton>
action的事件代码如下(databasecon使自己写的连接数据库的类):
if(startdbcourses.isEmpty()==true){
String sqlstr ="select name From master.dbo.sysdatabases where dbid>'6'";
databasecon con = new databasecon();
con.database(startdbaddr,"master",startlgname,startlgpw, sqlstr);
startdbcourses.clear();
con.rs.last();
int startnum = con.rs.getRow();
for(int j = 0;j<startnum;j++)
{
con.rs.absolute(j+1);
startdbcourses.add(new SelectItem(con.rs.getString("name")));
} faces-config.xml的设置如下:
<managed-bean>
<managed-bean-name>StartdbCon</managed-bean-name>
<managed-bean-class>com.jsfabc.jsh.view.bean.startact</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean> 于是问题就产生了,我的页面初始化后,第一次点击BUTTON,很乖~代码执行了,startdbcourses的值付到了一个下拉框里面。但是我再点BUTTON他不执行代码了,把我的页面刷新了,害我的下拉框里面的值全没了。再点他又执行代码就是说点一下执行代码,再点一下刷新页面,不停在这两个行为间重复。
很郁闷,貌似不是代码的问题,会不会是我的控件哪个属性没设置好的问题,还是说是JSF的框架机制的问题我没搞懂。
各位NB的人物啊帮帮小弟吧。初学者- - 难免郁闷小白问题,求教!
action的事件代码如下(databasecon使自己写的连接数据库的类):
if(startdbcourses.isEmpty()==true){
String sqlstr ="select name From master.dbo.sysdatabases where dbid>'6'";
databasecon con = new databasecon();
con.database(startdbaddr,"master",startlgname,startlgpw, sqlstr);
startdbcourses.clear();
con.rs.last();
int startnum = con.rs.getRow();
for(int j = 0;j<startnum;j++)
{
con.rs.absolute(j+1);
startdbcourses.add(new SelectItem(con.rs.getString("name")));
} faces-config.xml的设置如下:
<managed-bean>
<managed-bean-name>StartdbCon</managed-bean-name>
<managed-bean-class>com.jsfabc.jsh.view.bean.startact</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean> 于是问题就产生了,我的页面初始化后,第一次点击BUTTON,很乖~代码执行了,startdbcourses的值付到了一个下拉框里面。但是我再点BUTTON他不执行代码了,把我的页面刷新了,害我的下拉框里面的值全没了。再点他又执行代码就是说点一下执行代码,再点一下刷新页面,不停在这两个行为间重复。
很郁闷,貌似不是代码的问题,会不会是我的控件哪个属性没设置好的问题,还是说是JSF的框架机制的问题我没搞懂。
各位NB的人物啊帮帮小弟吧。初学者- - 难免郁闷小白问题,求教!
解决方案 »
- Action出现异常,所有信息都有,想把异常信息输出到页面中,请问怎么做?
- 如何比较二个时间相差几天啊
- <a href=mainform.jsp>|发表观点|</a>这么设置成红色?
- 大家可不可以说说他们的区别吗?
- jsp 调servlet的问题
- 如何在网页中显示自己的flash
- spring中xml文件配置报错
- 遇到一些问题,求解
- 如何用JDBC连接SQL SERVER 2000?出现下述错误javax.servlet.ServletException?
- 做一个和csdn差不多的论坛 可是碰到关于“流已被关闭“的问题
- servlet的,不懂,请各位指教
- textare(readyonly = “readyonly”)中用不了onchange,怎么回事???
1.打开页面,点击按钮startdbcourses.isEmpty()==true执行代码2.在点击按钮startdbcourses.isEmpty()==false不执行代码,return null,就刷新页面了3.点击按钮,又是第一步了startdbcourses.isEmpty()==true执行代码
可是我早就设置过断点了~~不是代码的问题!!现在是第一次点执行代码,第二次点。。不执行代码!!直接刷新。我吧IF去掉也没用。
少个返回值 页面跳转的的值 对应 faces-config.xml 中的 把action 所有代码 还有 faces-config.xml配置的页面跳转代码也贴下
麻烦你了~~看一下吧~~~
<?xml version='1.0' encoding='UTF-8'?><faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
version="1.2"><navigation-rule>
<from-view-id>/hello.jsp </from-view-id>
<navigation-case>
<from-outcome>startdbaddr</from-outcome>
<to-view-id>/hello.jsp</to-view-id>
</navigation-case> </navigation-rule> <managed-bean>
<managed-bean-name>StartdbCon</managed-bean-name>
<managed-bean-class>com.jsfabc.jsh.view.bean.startact</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
</faces-config>
public class startact { public String startdbaddr;
public String startlgname;
public String startlgpw;
public ArrayList startdbcourses;
public String startdbcourse; public startact(){
startdbcourses =new ArrayList();
}
public void setstartdbaddr(String startdbaddr){
this.startdbaddr=startdbaddr;
}
public String getstartdbaddr(){
return startdbaddr;
}
public void setstartlgname(String startlgname){
this.startlgname=startlgname;
}
public String getstartlgname(){
return startlgname;
}
public void setstartlgpw(String startlgpw){
this.startlgpw=startlgpw;
}
public String getstartlgpw(){
return startlgpw;
}
public String getstartdbcourse() {
return startdbcourse;
}
public void setstartdbcourse(String newValue) {
this.startdbcourse = newValue;
}
public Collection getstartdbcourses(){
return startdbcourses;
}
public void setstartdbcourses(ArrayList newValue) {
this.startdbcourses = newValue;
}
public void startconact(){
try{
System.out.println("iiiiiiiiiiiiiiii");
String sqlstr ="select name From master.dbo.sysdatabases where dbid>'6'";
databasecon con = new databasecon();
con.database(startdbaddr,"master",startlgname,startlgpw, sqlstr);
startdbcourses.clear();
con.rs.last();
int startnum = con.rs.getRow();
for(int j = 0;j<startnum;j++)
{
con.rs.absolute(j+1);
startdbcourses.add(new SelectItem(con.rs.getString("name")));
}
}
catch(Exception e){
System.out.println(e);
} }我的代码主要功能是登陆数据库的服务器,验证用户名和密码,然后在下拉框里显示该服务器的所有数据库名。
怎么解决?那人貌似也没问到。
该贴地址:
http://topic.csdn.net/u/20070823/08/44594FA3-E5A6-4014-BD68-85EF458E5F1A.html
不是这个问题,主要是点击COMMONBUTTON后代码执行成功页面的UIViewRoot就重新定义了。因此再点击页面就刷新了一遍。刷新了后再点击它就又开始执行代码。知是做掉问题的所在了。但是- -要怎么解决呢
<from-view-id>/hello.jsp </from-view-id>
<navigation-case>
<from-outcome>startdbaddr</from-outcome>
<to-view-id>/hello.jsp</to-view-id>
</navigation-case> </navigation-rule>public String startconact(){
return "startdbaddr";
}如果只是返回当前页面,可以用return null;代替,不需要在xml文件中设定
<%@taglib uri="http://richfaces.org/a4j" prefix="a4j"%><h:selectOneMenu value="" id="menu1"></h:selectOneMenu><a4j:commandButton action="" value="" reRender="menu1"/>
startdbcourses.add(new SelectItem(con.rs.getString("name")));
只是添加的是下拉框的value,label为空
你试一下
startdbcourses.add(new SelectItem(con.rs.getString("name"),con.rs.getString("name")));
不要说改成startdbcourses.add(new SelectItem(con.rs.getString("name"),con.rs.getString("name")));看他运行不运行,说了第一次点,运行没出错,都OK的。下拉框也有内容,我在代码钱还手动做了个断点:System.out.println("iiiiiiiiiiiiiiii");所以第一次点BUTTON都没问题。但是第二次点击就只刷新页面不执行方法!!!!现在和方法里面的代码没关系,而且产生的原因我也知道了,在12楼已经写了!!
现在我想要找解决方法~~~
public void restoreState(FacesContext context, Object state)
public Object saveState(FacesContext context)
用的是JSF RI 1.1.01 Libraries,额状态怎么去分在客户端还是服务端?
只刷新页面不执行方法,定义一个静态变量
private static int i=0;
public String startconact(){
if(i==0){
// 具体实现
}
i++;
return null;
}
在发下web.xml 会不会是你定义了两个Faces Servlet啊
========================================================================
类似的一个简单的入门例子
http://vincent-feng.javaeye.com/blog/272583
public String startconact(){
return "";
}试下 你开始点击一次后 上面的URL 是不是后面有一串乱七八糟的地址啊
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<display-name>Ajax4jsf Filter</display-name>
<filter-name>ajax4jsf</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>ajax4jsf</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
<param-value>false</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
public String startdbaddr;
public String startlgname;
public String startlgpw;
public ArrayList startdbcourses;
public String startdbcourse;都public 还get set你jsp页面调用哪些标签?
还用到了 myfaces了?
<%@page contentType="text/html; charset=UTF-8"%>
<%@taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
你把方法改成 public String startconact(){return"";
} 试了吗