Hello.

I'm trying to add a single test record (a comment item) to my MySQL database.
So here are my sources of JSF2 project.

- main xhtml page:

<h:body>
	<h:panelGroup id="mainBlock" layout="block">
		<h:panelGroup id="header" layout="block">
			<h:graphicImage value="resources/logo.jpg" style=""/>
		</h:panelGroup><br/>
		<h:panelGroup id="menu" layout="block">
			<h:panelGrid columns="1" style="">
				<h:outputLabel value="MENU" style=""/>
                                <br/>
 
				<h:form>
					<h:commandLink action="#{navigationBean.requestPage}">
						<f:param name="requestedPage" value="news.xhtml"/>
						<f:ajax execute="@this" render="@none" />
						<f:ajax render=":content"/>
						<h:graphicImage value="resources/news.png"/>
					</h:commandLink>
                                        <br/><br/>
					<h:commandLink action="#{navigationBean.requestPage}">
						<f:param name="requestedPage" value="comments.xhtml"/>
						<f:ajax execute="@this" render="@none"/>
						<f:ajax render=":content"/>
						<h:graphicImage value="resources/comments.png"/>
					</h:commandLink>
					<h:commandLink action="#{navigationBean.requestPage}">
						<f:param name="requestedPage" value="login.xhtml"/>
						<f:ajax execute="@this" render="@none"/>
						<f:ajax render=":content"/>
						<h:graphicImage value="resources/login.png" style=""/>
					</h:commandLink>
				</h:form>
			</h:panelGrid>
		</h:panelGroup>
 
		<h:panelGroup id="content" layout="block">
			<ui:include src="#{navigationBean.viewedPage}"/>
		</h:panelGroup>
	</h:panelGroup>
</h:body>

- xhtml page where I try to add a comment into DB after clicking the button:

<h:dataTable id="table" value="#{db.commentsList}" var="c" style="">
	<h:column>
		<f:facet name="header">
			User
		</f:facet>
		#{c.user}
	</h:column>
	<h:column>
		<f:facet name="header">
			Comment
		</f:facet>
		#{c.content}
	</h:column>
	<h:column>
		<f:facet name="header">
			Date
		</f:facet>
		#{c.data}
	</h:column>
</h:dataTable>
<br/><br/>
 
<h:form>
	<h:commandButton action="#{db.addComment}" value="Submit"/>
</h:form>

- java code of my bean:

@ManagedBean(name = "db")
public class Database
{
	private List<Comment> commentsList;
        
         .....
 
        public void addComment()
	{
		Connection conn = null;
 
		try
		{
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			conn = DriverManager.getConnection("jdbc:mysql:///jsfproject_db", "root", "pwd");
 
			PreparedStatement ps = conn.prepareStatement("INSERT INTO comments VALUES (null, 'test', cast('2000-01-01' AS date), 'test')");
			ps.executeUpdate();
 
			ps = conn.prepareStatement("SELECT user, content, data FROM comments");
			ResultSet results = ps.executeQuery();
 
			commentsList = new ArrayList<Comment>();
 
			while (results.next())
			{
				Comment com = new Comment();
				com.user = results.getString("user");
				com.content = results.getString("content");
				com.data = results.getDate("data");
				
				commentsList.add(com);
			}
		}
		catch (Exception ex)
		{
			Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
		} finally
		{
			try
			{
				conn.close();
			} catch (SQLException ex)
			{
				Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
			}
		}
	}
}

The double f:ajax tags in commandLink body are to solve a problem, where I had to double click the button to reload content div.

And now here comes similar problem:
After loading the page, the first click of comment adding button never works - nothing happens. I was adding some logging methods into the addComment method and it is not executed at all on first click. I suspect it's caused by my Ajax reloaded div code, because when I launch such button on a plain page, it works good.

Any suggestions how to fix my code? Alternatively are there other ways of realizing panel refreshing instead of using ui:include tag, which might be causing the problem here?

Recommended Answers

All 4 Replies

Member Avatar for stbuchok

You are going to want to ask this question in the Java forum. JavaScript and Java are 2 completely different things and have nothing in common except for part of the name.

You meant a JSP section? Because I don't see how my problem would be connected with pure Java. I posted here only because of being encouraged by 'Ajax' word.

Member Avatar for stbuchok

None of your code is JavaScript, therefore it needs to go to another forum, please post in the proper forum or you won't be able to get any help. Try the JSP forum.

Ok, will do so, thanks.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.