Author: alexsmirnov
Date: 2007-11-29 20:30:52 -0500 (Thu, 29 Nov 2007)
New Revision: 4371
Added:
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/java/
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/java/org/
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/java/org/ajax4jsf/
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/java/org/ajax4jsf/portlet/
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/java/org/ajax4jsf/portlet/seam/
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/java/org/ajax4jsf/portlet/seam/PortalIdentity.java
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/resources/
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/resources/components.properties
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/resources/seam.properties
Modified:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/AjaxPortletBridge.java
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/AbstractExternalContext.java
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/PortletContextImpl.java
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/PortletRenderContextImpl.java
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/ServletContextImpl.java
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/WEB-INF/pages.xml
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/WEB-INF/portlet.xml
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/book.xhtml
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/hotel.xhtml
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/main.xhtml
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/template.xhtml
Log:
Fix some issues with Seam portlet sample
Modified:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/AjaxPortletBridge.java
===================================================================
---
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/AjaxPortletBridge.java 2007-11-30
01:16:58 UTC (rev 4370)
+++
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/AjaxPortletBridge.java 2007-11-30
01:30:52 UTC (rev 4371)
@@ -4,6 +4,7 @@
package org.ajax4jsf.portlet;
import java.io.PrintWriter;
+import java.security.Principal;
import java.util.Map;
import java.util.ResourceBundle;
@@ -96,6 +97,7 @@
} // saveView(facesContext);
} catch (Exception e) {
+ // TODO - handle exception.
log.error("Error processing execute lifecycle", e);
throw new BridgeException("Error processing execute lifecycle ", e);
} finally {
@@ -167,6 +169,9 @@
// will restore session prefiv by it's value.
portletSession.setAttribute(
AbstractExternalContext.NAMESPACE_PARAMETER, namespace);
+ Principal userPrincipal = request.getUserPrincipal();
+ // TODO - get user roles, defined in the portlet.xml ( ??? parse it ??? ), and store
all values for a "isUserInRole(roleName)" calls
+ portletSession.setAttribute(AbstractExternalContext.PORTAL_USER_PRINCIPAL,
userPrincipal, PortletSession.APPLICATION_SCOPE);
if (log.isDebugEnabled()) {
log
.debug("Finish rendering portlet for namespace "
@@ -177,6 +182,8 @@
// cached.
response.setProperty(RenderResponse.EXPIRATION_CACHE, "0");
} catch (Exception e) {
+ response.reset();
+ // TODO - handle exception
log.error("Error processing execute lifecycle", e);
throw new BridgeException("Error processing execute lifecycle ", e);
} finally {
Modified:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/AbstractExternalContext.java
===================================================================
---
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/AbstractExternalContext.java 2007-11-30
01:16:58 UTC (rev 4370)
+++
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/AbstractExternalContext.java 2007-11-30
01:30:52 UTC (rev 4371)
@@ -64,6 +64,8 @@
import javax.faces.context.FacesContext;
import javax.portlet.faces.Bridge;
+import org.ajax4jsf.portlet.AjaxPortletBridge;
+
/**
*
* @author shura
@@ -103,6 +105,7 @@
protected static final String[] EMPTY_STRING_ARRAY = new String[0];
public static final String PORTLET_CONFIG_ATTRIBUTE =
"org.ajax4jsf.portlet.CONFIG";
public static final Object RENDER_POLICY_ATTRIBUTE =
"org.ajax4jsf.portlet.RENDER_POLICY";
+ public static final String PORTAL_USER_PRINCIPAL =
"org.ajax4jsf.portlet.USER_PRINCIPAL";
// TODO - optimization.
private Map applicationMap;
@@ -482,7 +485,7 @@
protected abstract Enumeration getSessionAttributeNames();
- protected abstract String createActionUrl(Map parameters);
+ protected abstract String createActionUrl(Map<String, String> parameters);
public String encodeActionURL(String url) {
if (null == url) {
@@ -503,7 +506,7 @@
}
String viewId = portalUrl.getParameter(VIEW_ID_PARAMETER);
- actionUrl = createActionUrl(portalUrl.getParameters());
+ return createActionUrl(portalUrl.getParameters());
}
} catch (MalformedURLException e) {
throw new FacesException(e);
Modified:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/PortletContextImpl.java
===================================================================
---
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/PortletContextImpl.java 2007-11-30
01:16:58 UTC (rev 4370)
+++
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/PortletContextImpl.java 2007-11-30
01:30:52 UTC (rev 4371)
@@ -231,7 +231,7 @@
* @return
*/
@Override
- protected String createActionUrl(Map parameters){
+ protected String createActionUrl(Map<String, String> parameters){
return "/ajax4jsfPortletBridge/actionUrl/do/nothitg";
}
Modified:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/PortletRenderContextImpl.java
===================================================================
---
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/PortletRenderContextImpl.java 2007-11-30
01:16:58 UTC (rev 4370)
+++
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/PortletRenderContextImpl.java 2007-11-30
01:30:52 UTC (rev 4371)
@@ -38,13 +38,13 @@
public class PortletRenderContextImpl extends PortletContextImpl {
public String getResponseCharacterEncoding() {
- RenderResponse renderResponse = (RenderResponse) getPortletResponse();
- return renderResponse.getCharacterEncoding();
+ RenderResponse renderResponse = (RenderResponse) getPortletResponse();
+ return renderResponse.getCharacterEncoding();
}
public String getResponseContentType() {
- RenderResponse renderResponse = (RenderResponse) getPortletResponse();
- return renderResponse.getContentType();
+ RenderResponse renderResponse = (RenderResponse) getPortletResponse();
+ return renderResponse.getContentType();
}
public void setRequestCharacterEncoding(String encoding)
@@ -53,11 +53,11 @@
}
public String getRequestCharacterEncoding() {
- return null;
+ return null;
}
-
+
protected String getNamespace() {
- return ((RenderResponse)getPortletResponse()).getNamespace();
+ return ((RenderResponse) getPortletResponse()).getNamespace();
}
private Map<String, String[]> _requestParameters;
@@ -87,23 +87,31 @@
@Override
public void redirect(String url) throws IOException {
+ if (null == url) {
+ throw new NullPointerException("Path to redirect is null");
+ }
+ PortalActionURL actionURL = new PortalActionURL(url);
+ if(!actionURL.isInContext(getRequestContextPath()) ||
"true".equalsIgnoreCase(actionURL.getParameter(Bridge.DIRECT_LINK))){
throw new IllegalStateException(
- "Redirect to new url not at action phase");
+ "Redirect to new url not at action phase");
+ }
+ // HACK - if page is in the context, just treat it as navigation case
}
-
@Override
- protected String createActionUrl(Map parameters) {
- RenderResponse renderResponse = (RenderResponse) getPortletResponse();
- PortletURL portletURL = renderResponse.createActionURL();
- portletURL.setParameter(AbstractExternalContext.NAMESPACE_PARAMETER,
renderResponse.getNamespace());
- for (Iterator<Entry<String, String>> param =
parameters.entrySet().iterator(); param.hasNext();) {
+ protected String createActionUrl(Map<String, String> parameters) {
+ RenderResponse renderResponse = (RenderResponse) getPortletResponse();
+ PortletURL portletURL = renderResponse.createActionURL();
+ portletURL.setParameter(AbstractExternalContext.NAMESPACE_PARAMETER,
+ renderResponse.getNamespace());
+ for (Iterator<Entry<String, String>> param = parameters.entrySet()
+ .iterator(); param.hasNext();) {
Entry<String, String> parameter = param.next();
portletURL.setParameter(parameter.getKey(), parameter.getValue());
}
- return portletURL.toString();
+ return portletURL.toString();
}
-
+
public void dispatch(String path) throws IOException {
if (null == path) {
throw new NullPointerException("Path to new view is null");
@@ -117,34 +125,40 @@
try {
RenderRequest renderRequest = (RenderRequest) getPortletRequest();
RenderResponse portletResponse = (RenderResponse) getPortletResponse();
- dispatcher.include(renderRequest,
- portletResponse);
+ dispatcher.include(renderRequest, portletResponse);
} catch (PortletException e) {
throw new FacesException(e);
}
}
-
+
/**
* @return
*/
@SuppressWarnings("unchecked")
private Map<String, String[]> getSavedRequestParameters() {
if (null == _requestParameters) {
- // Get parameters ( all or a View state only ) restored as requered in the JSR 301 PLT
5.1
+ // Get parameters ( all or a View state only ) restored as requered
+ // in the JSR 301 PLT 5.1
Object preserveRequestAttr = Boolean.FALSE;
PortletConfig portletConfig = (PortletConfig)
getRequestAttribute(PORTLET_CONFIG_ATTRIBUTE);
if (null != portletConfig) {
String portletPreserveParamName = Bridge.PORTLET_ATTR_PREFIX
+ portletConfig.getPortletName()
+ Bridge.PRESERVE_ACTION_PARAM_ATTR_SUFFIX;
- preserveRequestAttr = getRequestAttribute(portletPreserveParamName);
+ preserveRequestAttr = getContextAttribute(portletPreserveParamName);
}
Map<String, String[]> parameters = (Map<String, String[]>)
getRequestAttribute(PortletViewState.REQUEST_PARAMETERS_ATTRIBUTE);
if (Boolean.TRUE.equals(preserveRequestAttr)) {
_requestParameters = parameters;
- } else if (null != parameters){
+ } else if (null != parameters) {
_requestParameters = new HashMap<String, String[]>();
- _requestParameters.put(ResponseStateManager.VIEW_STATE_PARAM,
parameters.get(ResponseStateManager.VIEW_STATE_PARAM));
+ String[] viewState = parameters
+ .get(ResponseStateManager.VIEW_STATE_PARAM);
+ if (null != viewState) {
+ _requestParameters.put(
+ ResponseStateManager.VIEW_STATE_PARAM, viewState);
+
+ }
}
}
return _requestParameters;
Modified:
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/ServletContextImpl.java
===================================================================
---
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/ServletContextImpl.java 2007-11-30
01:16:58 UTC (rev 4370)
+++
trunk/extensions/portlet/src/main/java/org/ajax4jsf/portlet/context/ServletContextImpl.java 2007-11-30
01:30:52 UTC (rev 4371)
@@ -15,6 +15,7 @@
import java.util.Locale;
import java.util.Map;
import java.util.Set;
+import java.util.Map.Entry;
import javax.faces.FacesException;
import javax.faces.context.FacesContext;
@@ -28,6 +29,7 @@
import javax.servlet.http.HttpSession;
import org.ajax4jsf.context.AjaxContext;
+import org.ajax4jsf.portlet.AjaxPortletBridge;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -163,6 +165,10 @@
}
public String getRemoteUser() {
+ Principal userPrincipal = getUserPrincipal();
+ if( null != userPrincipal){
+ return userPrincipal.getName();
+ }
return getHttpRequest().getRemoteUser();
}
@@ -300,9 +306,21 @@
}
@Override
- protected String createActionUrl(Map parameters) {
- String actionURL = getHttpRequest().getParameter(ACTION__PARAMETER);
- return actionURL;
+ protected String createActionUrl(Map<String, String> parameters) {
+ String url = getHttpRequest().getParameter(ACTION__PARAMETER);
+ if(null == url){
+ throw new FacesException("No portal action url availible");
+ }
+ PortalActionURL portalUrl;
+ try {
+ portalUrl = new PortalActionURL(url);
+ } catch (MalformedURLException e) {
+ throw new FacesException("Malformed Portal Action URL "+url);
+ }
+ for (Entry<String, String> parameterEntry : parameters.entrySet()) {
+ portalUrl.addParameter(parameterEntry.getKey(), parameterEntry.getValue());
+ }
+ return portalUrl.toString();
}
public String encodeResourceURL(String url) {
@@ -334,7 +352,15 @@
}
public Principal getUserPrincipal() {
- return getHttpRequest().getUserPrincipal();
+ Principal userPrincipal = getHttpRequest().getUserPrincipal();
+ HttpSession httpSession = getHttpRequest().getSession(false);
+ if(null != httpSession){
+ Principal portalPrincipal = (Principal)
httpSession.getAttribute(PORTAL_USER_PRINCIPAL);
+ if(null != portalPrincipal){
+ userPrincipal = portalPrincipal;
+ }
+ }
+ return userPrincipal;
}
public boolean isUserInRole(String role) {
Added:
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/java/org/ajax4jsf/portlet/seam/PortalIdentity.java
===================================================================
---
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/java/org/ajax4jsf/portlet/seam/PortalIdentity.java
(rev 0)
+++
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/java/org/ajax4jsf/portlet/seam/PortalIdentity.java 2007-11-30
01:30:52 UTC (rev 4371)
@@ -0,0 +1,121 @@
+/**
+ *
+ */
+package org.ajax4jsf.portlet.seam;
+
+import static org.jboss.seam.ScopeType.SESSION;
+import static org.jboss.seam.annotations.Install.APPLICATION;
+
+import java.security.Principal;
+
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.security.auth.login.LoginException;
+
+import org.jboss.seam.annotations.Install;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Startup;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+import org.jboss.seam.security.Identity;
+
+/**
+ * @author asmirnov
+ *
+ */
+(a)Name("org.jboss.seam.security.identity")
+@Scope(SESSION)
+@BypassInterceptors
+@Install(precedence = APPLICATION, classDependencies =
"javax.portlet.Portlet")
+@Startup
+public class PortalIdentity extends Identity {
+
+ public PortalIdentity() {
+ super();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.jboss.seam.security.Identity#authenticate()
+ */
+ @Override
+ public void authenticate() throws LoginException {
+ if (!isLoggedIn()) {
+ throw new LoginException();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.jboss.seam.security.Identity#hasPermission(java.lang.String,
+ * java.lang.String, java.lang.Object[])
+ */
+ @Override
+ public boolean hasPermission(String name, String action, Object... arg) {
+ // TODO Auto-generated method stub
+ return super.hasPermission(name, action, arg);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.jboss.seam.security.Identity#getPrincipal()
+ */
+ @Override
+ public Principal getPrincipal() {
+ return FacesContext.getCurrentInstance().getExternalContext()
+ .getUserPrincipal();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.jboss.seam.security.Identity#getUsername()
+ */
+ @Override
+ public String getUsername() {
+ String userName = null;
+ FacesContext facesContext = FacesContext.getCurrentInstance();
+ if (null != facesContext) {
+ ExternalContext externalContext = facesContext.getExternalContext();
+ if (null != externalContext.getUserPrincipal()) {
+ userName = externalContext.getRemoteUser();
+ }
+ }
+ return userName;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.jboss.seam.security.Identity#hasRole(java.lang.String)
+ */
+ @Override
+ public boolean hasRole(String role) {
+ return FacesContext.getCurrentInstance().getExternalContext()
+ .isUserInRole(role);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.jboss.seam.security.Identity#isLoggedIn()
+ */
+ @Override
+ public boolean isLoggedIn() {
+ return null != getPrincipal();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.jboss.seam.security.Identity#isLoggedIn(boolean)
+ */
+ @Override
+ public boolean isLoggedIn(boolean attemptLogin) {
+ return isLoggedIn();
+ }
+
+}
Property changes on:
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/java/org/ajax4jsf/portlet/seam/PortalIdentity.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Date Revision Author
Added:
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/resources/components.properties
===================================================================
---
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/resources/components.properties
(rev 0)
+++
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/resources/components.properties 2007-11-30
01:30:52 UTC (rev 4371)
@@ -0,0 +1 @@
+jndiPattern #{ejbName}/local
\ No newline at end of file
Property changes on:
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/resources/components.properties
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ text/plain
Added: trunk/samples/seamPortletEar/seamBookingPortlet/src/main/resources/seam.properties
===================================================================
Property changes on:
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/resources/seam.properties
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ text/plain
Modified:
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/WEB-INF/pages.xml
===================================================================
---
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/WEB-INF/pages.xml 2007-11-30
01:16:58 UTC (rev 4370)
+++
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/WEB-INF/pages.xml 2007-11-30
01:30:52 UTC (rev 4371)
@@ -20,7 +20,10 @@
</page>
<page view-id="/home.xhtml">
-
+ <action execute="#{identity.login}"
if="#{identity.loggedIn}"/>
+ <navigation from-action="#{identity.login}">
+ <render view-id="/main.xhtml"/>
+ </navigation>
<navigation>
<rule if="#{identity.loggedIn}">
<render view-id="/main.xhtml"/>
Modified:
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/WEB-INF/portlet.xml
===================================================================
---
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/WEB-INF/portlet.xml 2007-11-30
01:16:58 UTC (rev 4370)
+++
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/WEB-INF/portlet.xml 2007-11-30
01:30:52 UTC (rev 4371)
@@ -12,6 +12,10 @@
<value>/home.xhtml</value>
</init-param>
+ <init-param>
+ <name>javax.portlet.faces.preserveActionParams</name>
+ <value>true</value>
+ </init-param>
<expiration-cache>-0</expiration-cache>
<portlet-info>
Modified: trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/book.xhtml
===================================================================
--- trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/book.xhtml 2007-11-30
01:16:58 UTC (rev 4370)
+++ trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/book.xhtml 2007-11-30
01:30:52 UTC (rev 4371)
@@ -55,14 +55,14 @@
<s:decorate id="creditCardDecorate" template="edit.xhtml">
<ui:define name="label">Credit Card #:</ui:define>
<h:inputText id="creditCard" value="#{booking.creditCard}"
required="true">
- <a:support event="onblur" reRender="creditCardDecorate"/>
+ <a:support event="onblur" reRender="creditCardDecorate"
bypassUpdates="true"/>
</h:inputText>
</s:decorate>
<s:decorate id="creditCardNameDecorate"
template="edit.xhtml">
<ui:define name="label">Credit Card Name:</ui:define>
<h:inputText id="creditCardName"
value="#{booking.creditCardName}" required="true">
- <a:support event="onblur"
reRender="creditCardNameDecorate"/>
+ <a:support event="onblur" reRender="creditCardNameDecorate"
bypassUpdates="true"/>
</h:inputText>
</s:decorate>
@@ -92,9 +92,9 @@
</s:decorate>
<div class="buttonBox">
- <h:commandButton id="proceed" value="Proceed"
action="#{hotelBooking.setBookingDetails}"/>
+ <a:commandButton id="proceed" value="Proceed"
action="#{hotelBooking.setBookingDetails}"/>
 
- <s:button id="cancel" value="Cancel"
action="#{hotelBooking.cancel}"/>
+ <a:commandButton id="cancel" value="Cancel"
action="#{hotelBooking.cancel}"/>
</div>
</fieldset>
Modified: trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/hotel.xhtml
===================================================================
--- trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/hotel.xhtml 2007-11-30
01:16:58 UTC (rev 4370)
+++ trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/hotel.xhtml 2007-11-30
01:30:52 UTC (rev 4371)
@@ -3,6 +3,7 @@
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:a="http://richfaces.org/a4j"
xmlns:s="http://jboss.com/products/seam/taglib"
template="template.xhtml">
@@ -18,9 +19,9 @@
<div class="buttonBox">
<h:form id="hotel">
- <h:commandButton id="bookHotel"
action="#{hotelBooking.bookHotel}" value="Book Hotel"/>
+ <a:commandButton id="bookHotel"
action="#{hotelBooking.bookHotel}" value="Book Hotel"/>
 
- <h:commandButton id="cancel" action="#{hotelBooking.cancel}"
value="Back to Search"/>
+ <a:commandButton id="cancel" action="#{hotelBooking.cancel}"
value="Back to Search"/>
</h:form>
</div>
Modified: trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/main.xhtml
===================================================================
--- trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/main.xhtml 2007-11-30
01:16:58 UTC (rev 4370)
+++ trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/main.xhtml 2007-11-30
01:30:52 UTC (rev 4371)
@@ -42,7 +42,7 @@
</h:form>
</div>
-
+<h:form id="hotels">
<a:outputPanel id="searchResults">
<div class="section">
<h:outputText value="No Hotels Found" rendered="#{hotels != null and
hotels.rowCount==0}"/>
@@ -65,13 +65,13 @@
</h:column>
<h:column>
<f:facet name="header">Action</f:facet>
- <s:link id="viewHotel" value="View Hotel"
action="#{hotelBooking.selectHotel(hot)}"/>
+ <a:commandLink id="viewHotel" value="View Hotel"
action="#{hotelBooking.selectHotel(hot)}"/>
</h:column>
</h:dataTable>
- <s:link value="More results" action="#{hotelSearch.nextPage}"
rendered="#{hotelSearch.nextPageAvailable}"/>
+ <a:commandLink value="More results"
action="#{hotelSearch.nextPage}"
rendered="#{hotelSearch.nextPageAvailable}"
reRender="searchResults"/>
</div>
</a:outputPanel>
-
+</h:form>
<div class="section">
<h1>Current Hotel Bookings</h1>
</div>
Modified: trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/template.xhtml
===================================================================
---
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/template.xhtml 2007-11-30
01:16:58 UTC (rev 4370)
+++
trunk/samples/seamPortletEar/seamBookingPortlet/src/main/webapp/template.xhtml 2007-11-30
01:30:52 UTC (rev 4371)
@@ -3,11 +3,12 @@
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
+
xmlns:a="http://richfaces.org/a4j"
xmlns:s="http://jboss.com/products/seam/taglib">
<div id="document">
<div id="header">
- <div id="title"><img src="img/hdr.title.gif"
alt="JBoss Suites: seam framework demo"/></div>
+ <div id="title"><h:graphicImage value="/img/hdr.title.gif"
alt="JBoss Suites: seam framework demo"/></div>
<div id="status">
Welcome #{user.name}
| <s:link id="search" view="/main.xhtml"
value="Search" propagation="none"/>
@@ -25,5 +26,6 @@
</div>
</div>
<div id="footer">Created with JBoss Seam 2.0, JBoss EJB 3.0, JSF 1.2,
Hibernate 3 and Facelets</div>
+ <!-- a:log hotkey="M" /-->
</div>
</f:view>