
Эксперт
  
Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany
Репутация: 3 Всего: 8
|
не могу понять как построена архитектура ajax + jsf в таких фраймворках как icefaces или seam. помогите разобраться с вызовами в архитектуре.. а именно.. представим, есть некая страница, которая реализует ajax + jsf, как пример: | Код | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ice="http://www.icesoft.com/icefaces/component" xmlns:s="http://jboss.com/products/seam/taglib"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>JBoss Suites: Seam Framework</title> <link href="css/screen.css" rel="stylesheet" type="text/css" /> </head> <body id="pgHome"> <div id="document"> <div id="header"> <div id="title"><img src="img/hdr.title.gif" alt="JBoss Suites: seam framework demo"/></div> </div> <div id="container"> <div id="sidebar"> <h1>Integrated multi-layer validation</h1> <p> Robust applications need data validation in several different places. Seam integrates Hibernate Validator, a set of annotations for expressing data model constraints in your domain model classes. Then, these constraints are applied almost completely transparently at three levels of the application: by Seam when the user first enters data, by EJB before persisting data to the database, and, if you use Hibernate to generate your database schema, by the database constraints themselves. Multi-layer validation hardens your application and protects your data. Even better, it's self-documenting, and easy to change when your business rules change. </p> <p> <a href="#" onclick="window.open('exp/registerExp.html','exp','width=752,height=500,scrollbars=yes');"> What happens when I register? </a> </p> </div> <div id="content"> <div class="section"> <h1>Register</h1> </div> <div class="section"> <h:form id="register"> <fieldset> <s:validateAll>
<f:facet name="aroundInvalidField"> <s:span styleClass="errors"/> </f:facet> <div id="undiv" class="entry"> <div class="label"><h:outputLabel for="username">Username:</h:outputLabel></div> <div class="input"> <s:decorate> <ice:inputText id="username" value="#{user.username}" required="true" partialSubmit="true" > </ice:inputText> <br/> <s:message/> </s:decorate> </div> </div> <div id="rndiv" class="entry"> <div class="label"><h:outputLabel for="name">Real Name:</h:outputLabel></div> <div class="input"> <s:decorate> <ice:inputText id="name" value="#{user.name}" required="true" partialSubmit="true"> </ice:inputText> <br/> <s:message/> </s:decorate> </div> </div> <div id="pw1div" class="entry"> <div class="label"><h:outputLabel for="password">Password:</h:outputLabel></div> <div class="input"> <s:decorate> <ice:inputSecret id="password" value="#{user.password}" redisplay="true" required="true" partialSubmit="true" /> <br/> <h:message for="password"/> </s:decorate> </div> </div> <div id="pw2div" class="entry"> <div class="label"><h:outputLabel for="verify">Verify Password:</h:outputLabel></div> <div class="input"> <s:decorate> <ice:inputSecret id="verify" value="#{register.verify}" redisplay="true" required="true" partialSubmit="true"/> <br/> <h:message for="verify"/> </s:decorate> </div> </div>
</s:validateAll> <div class="entry errors"> <h:messages globalOnly="true"/> </div> <div class="entry"> <div class="label"> </div> <div class="input"> <h:commandButton id="register" value="Register" action="#{register.register}" styleClass="button"/> <s:link id="cancel" value="Cancel" action="login" linkStyle="button" buttonClass="button"/> </div> </div> </fieldset> </h:form> </div> </div> </div> <div id="footer">Created with JBoss EJB 3.0, Seam, MyFaces, and Facelets</div> </div> </body> </html>
|
при вызове клиентом данной страницы получаем следующее: | Код | <html xmlns="http://www.w3.org/1999/xhtml"><head><meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"></meta> <title>JBoss Suites: Seam Framework</title> <link href="css/screen.css" rel="stylesheet" type="text/css"></link> <meta content="Rendered by ICEFaces⢠D2D" name="icefaces"></meta> <noscript><meta content="0;url=./xmlhttp/javascript-blocked" http-equiv="refresh"></meta></noscript> <script language="javascript" src="/seam-icefaces/xmlhttp/icefaces-d2d.js"></script></head> <body id="body"><iframe frameborder="0" id="history-frame" src="/seam-icefaces/xmlhttp/blank.iface" style="z-index: 10000; visibility: hidden; width: 0; height: 0; opacity: 0.22; filter: alpha(opacity=22);"></iframe> <div id="document"><div id="header"><div id="title"><img alt="JBoss Suites: seam framework demo" src="img/hdr.title.gif"></img></div></div> <div id="container"><div id="sidebar"><h1>Integrated multi-layer validation</h1> <p> Robust applications need data validation in several different places. Seam integrates Hibernate Validator, a set of annotations for expressing data model constraints in your domain model classes. Then, these constraints are applied almost completely transparently at three levels of the application: by Seam when the user first enters data, by EJB before persisting data to the database, and, if you use Hibernate to generate your database schema, by the database constraints themselves. Multi-layer validation hardens your application and protects your data. Even better, it's self-documenting, and easy to change when your business rules change.</p>
<p><a href="#" onclick="window.open('exp/registerExp.html','exp','width=752,height=500,scrollbars=yes');"> What happens when I register?</a></p></div> <div id="content"><div class="section"><h1>Register</h1></div> <div class="section"><form action="iceSubmit('register');" context_type="class com.icesoft.faces.context.BridgeFacesContext" enctype="application/x-www-form-urlencoded" id="register" method="post" onsubmit="return false;" style=""><input name="register" type="hidden" value="register"></input> <input name="icefacesCssUpdates" type="hidden" value=""></input> <input name="viewNumber" type="hidden" value="1"></input> <input name="icefacesID" type="hidden" value="0j7A5cxlreaMtXw0tE_yrw"></input> <fieldset><div class="entry" id="undiv"><div class="label"><label for="register:username" id="register:_id23" style=""></label> Username:</div> <div class="input"><input class="iceInputtext" id="register:username" name="register:username" onblur="setFocus('');iceSubmitPartial(form,this,event); return false;" onfocus="setFocus(this.id);" onkeypress="iceSubmit(form,this,event);" style="" type="text" value=""></input> <br><span id="register:_id28"></span></div></div> <div class="entry" id="rndiv"><div class="label"><label for="register:name" id="register:_id30" style=""></label> Real Name:</div>
<div class="input"><input class="iceInputtext" id="register:name" name="register:name" onblur="setFocus('');iceSubmitPartial(form,this,event); return false;" onfocus="setFocus(this.id);" onkeypress="iceSubmit(form,this,event);" style="" type="text"></input> <br><span id="register:_id35"></span></div></div> <div class="entry" id="pw1div"><div class="label"><label for="register:password" id="register:_id37" style=""></label> Password:</div> <div class="input"><input class="iceInputtext" id="register:password" name="register:password" onblur="setFocus('');iceSubmitPartial(form,this,event); return false;" onfocus="setFocus(this.id);" onkeypress="iceSubmit(form,this,event);" style="" type="password" value=""></input> <br><span id="register:_id42"></span></div></div> <div class="entry" id="pw2div"><div class="label"><label for="register:verify" id="register:_id44" style=""></label> Verify Password:</div> <div class="input"><input class="iceInputtext" id="register:verify" name="register:verify" onblur="setFocus('');iceSubmitPartial(form,this,event); return false;" onfocus="setFocus(this.id);" onkeypress="iceSubmit(form,this,event);" style="" type="password" value=""></input> <br><span id="register:_id49"></span></div></div> <div class="entry errors"><ul id="register:_id51"></ul></div> <div class="entry"><div class="label"> </div> <div class="input"><input class="button" id="register:register" name="register:register" onblur="setFocus('');" onclick="iceSubmit(form,this,event);return false;" onfocus="setFocus(this.id);" style="" type="submit" value="Register"></input> <a href="/seam-icefaces/register.seam?actionOutcome=login&cid=2" id="register:cancel">Cancel</a></div></div></fieldset>
<input command_link_hidden_field="command_link_hidden_field" name="focus_hidden_field" type="hidden"></input></form></div></div></div> <div id="footer">Created with JBoss EJB 3.0, Seam, MyFaces, and Facelets</div> <div>test</div></div> <script id="dynamic-code" language="javascript"></script></body></html>
|
при заполнении таких input полей как id="register:password" и переходе на следующее поле сработает onBlur() и данные будут посланы серверу.. например: | Код | partial=true&ice.event.target=register%3Aname&ice.event.captured=register%3Aname&ice.event.type=onblur
®ister=&icefacesCssUpdates=&viewNumber=1&icefacesID=0j7A5cxlreaMtXw0tE_yrw®ister%3Ausername=polosatij
®ister%3Aname=®ister%3Apassword=®ister%3Averify=&focus_hidden_field=&focus=&icefacesID=0j7A5cxlreaMtXw0tE_yrw
%2C&viewNumber=1%2C&rand=0.0025119876651192863
|
и вот с этого момента я не понимаю.. во первых, кто получает эти данные? куда именно они передаются? есть ещё один файл, исходя из #{user.password} => а именно класс User. здесь данные проверяются на валидность: | Код | //$Id: User.java,v 1.1 2006/11/20 05:19:01 gavin Exp $ package org.jboss.seam.example.booking;
import static org.jboss.seam.ScopeType.SESSION;
import java.io.Serializable;
import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table;
import org.hibernate.validator.Length; import org.hibernate.validator.NotNull; import org.hibernate.validator.Pattern; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope;
@Entity @Name("user") @Scope(SESSION) @Table(name="Customer") public class User implements Serializable { private String username; private String password; private String name; public User(String name, String password, String username, String test) { this.name = name; this.password = password; this.username = username; } public User() {}
@NotNull @Length(max=100) public String getName() { return name; } public void setName(String name) { this.name = name; } @NotNull @Length(min=5, max=15) public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Id @Length(min=5, max=15) @Pattern(regex="^\\w*$", message="not a valid username") public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @Override public String toString() { return "User(" + username + ")"; } }
|
не пойму.. а где промежуточное звено между ajax-ом и самой ява? как именно вызывается класс User и кто его вызывает?
|