[jboss-cvs] JBossBlog SVN: r171 - in trunk: src/action/org/jboss/blog/session/feed/mod and 6 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Jan 14 14:06:52 EST 2008
Author: adamw
Date: 2008-01-14 14:06:51 -0500 (Mon, 14 Jan 2008)
New Revision: 171
Added:
trunk/src/action/org/jboss/blog/session/feed/posts/filter/FilterAddBean.java
trunk/src/tools/org/jboss/blog/tools/validator/
trunk/src/tools/org/jboss/blog/tools/validator/Regexp.java
trunk/src/tools/org/jboss/blog/tools/validator/RegexpValidator.java
trunk/view/manage/aggregated/filter_add.xhtml
Modified:
trunk/resources/WEB-INF/components.xml
trunk/resources/WEB-INF/pages.xml
trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java
trunk/src/action/org/jboss/blog/session/feed/posts/filter/AndFilter.java
trunk/src/action/org/jboss/blog/session/feed/posts/filter/AuthorRegexpFilter.java
trunk/src/action/org/jboss/blog/session/feed/posts/filter/NotPodcastFilter.java
trunk/src/action/org/jboss/blog/session/feed/posts/filter/PodcastFilter.java
trunk/src/action/org/jboss/blog/session/feed/posts/filter/TotalFilter.java
trunk/src/action/org/jboss/blog/session/update/UpdateManager.java
trunk/src/model/org/jboss/blog/model/feed/AggregatedFeed.java
trunk/view/manage/aggregated/aggregated_mod.xhtml
Log:
Modified: trunk/resources/WEB-INF/components.xml
===================================================================
--- trunk/resources/WEB-INF/components.xml 2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/resources/WEB-INF/components.xml 2008-01-14 19:06:51 UTC (rev 171)
@@ -46,6 +46,13 @@
<action execute="#{redirect.returnToCapturedView}"/>
</event>
+ <event type="org.jboss.blog.captureView">
+ <action execute="#{redirect.captureCurrentView}"/>
+ </event>
+ <event type="org.jboss.blog.restoreView">
+ <action execute="#{redirect.returnToCapturedView}"/>
+ </event>
+
<mail:mail-session host="localhost" port="2525" username="test" password="test" />
<async:quartz-dispatcher />
Modified: trunk/resources/WEB-INF/pages.xml
===================================================================
--- trunk/resources/WEB-INF/pages.xml 2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/resources/WEB-INF/pages.xml 2008-01-14 19:06:51 UTC (rev 171)
@@ -91,6 +91,16 @@
<navigation from-action="#{aggregatedFeedMod.saveNew}">
<redirect view-id="/manage/feed_add.xhtml" />
</navigation>
+
+ <!-- Should be done using a wildcard, but they aren't supported -->
+ <navigation from-action="#{filterAdd.addToList(aggregatedFeedMod.globalFilters)}">
+ <raise-event type="org.jboss.blog.captureView" />
+ <redirect view-id="/manage/aggregated/filter_add.xhtml" />
+ </navigation>
+ <navigation from-action="#{filterAdd.addToList(aggregatedFeedMod.selectedFeedsFilters[feed])}">
+ <raise-event type="org.jboss.blog.captureView" />
+ <redirect view-id="/manage/aggregated/filter_add.xhtml" />
+ </navigation>
</page>
<page view-id="/manage/aggregated/aggregated_edit.xhtml">
@@ -100,8 +110,33 @@
<end-conversation />
<redirect view-id="/manage/index.xhtml" />
</navigation>
+
+ <!-- Should be done using a wildcard, but they aren't supported -->
+ <navigation from-action="#{filterAdd.addToList(aggregatedFeedMod.globalFilters)}">
+ <raise-event type="org.jboss.blog.captureView" />
+ <redirect view-id="/manage/aggregated/filter_add.xhtml" />
+ </navigation>
+ <navigation from-action="#{filterAdd.addToList(aggregatedFeedMod.selectedFeedsFilters[feed])}">
+ <raise-event type="org.jboss.blog.captureView" />
+ <redirect view-id="/manage/aggregated/filter_add.xhtml" />
+ </navigation>
</page>
+ <!-- Add filters -->
+
+ <page view-id="/manage/aggregated/filter_add.xhtml" conversation-required="true">
+ <!-- Should be done using a wildcard, but they aren't supported -->
+ <navigation from-action="#{filterAdd.add(filterAdd.podcastFilter)}">
+ <raise-event type="org.jboss.blog.restoreView" />
+ </navigation>
+ <navigation from-action="#{filterAdd.add(filterAdd.notPodcastFilter)}">
+ <raise-event type="org.jboss.blog.restoreView" />
+ </navigation>
+ <navigation from-action="#{filterAdd.add(filterAdd.authorRegexpFilter)}">
+ <raise-event type="org.jboss.blog.restoreView" />
+ </navigation>
+ </page>
+
<!-- Manage templates -->
<page view-id="/manage/template/template_add.xhtml">
@@ -135,42 +170,42 @@
<message>Not found</message>
</redirect>
</exception>
-
+
<exception class="javax.persistence.EntityNotFoundException">
<redirect view-id="/error.xhtml">
<message>Not found</message>
</redirect>
</exception>
-
+
<exception class="javax.persistence.OptimisticLockException">
<end-conversation/>
<redirect view-id="/error.xhtml">
<message>Another user changed the same data, please try again</message>
</redirect>
</exception>
-
+
<exception class="org.jboss.seam.security.AuthorizationException">
<redirect view-id="/error.xhtml">
<message>You don't have permission to do this</message>
</redirect>
</exception>
-
+
<exception class="org.jboss.seam.security.NotLoggedInException">
<redirect view-id="/login.xhtml">
<message>Please log in first</message>
</redirect>
</exception>
-
+
<exception class="javax.faces.application.ViewExpiredException">
<redirect view-id="/error.xhtml">
<message>Your session has timed out, please try again</message>
</redirect>
</exception>
-
+
<exception>
<redirect view-id="/error.xhtml">
<message>Unexpected error, please try again</message>
</redirect>
</exception>
-
+
</pages>
Modified: trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java 2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java 2008-01-14 19:06:51 UTC (rev 171)
@@ -10,10 +10,7 @@
import org.jboss.blog.session.view.LinkServiceBean;
import org.jboss.seam.ScopeType;
import org.jboss.seam.faces.FacesMessages;
-import org.jboss.seam.annotations.Create;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.*;
import javax.faces.application.FacesMessage;
import javax.persistence.EntityManager;
@@ -143,6 +140,18 @@
this.selectedFeeds = selectedFeeds;
}
+ public Map<Feed, List<PostFilter>> getSelectedFeedsFilters() {
+ return selectedFeedsFilters;
+ }
+
+ public List<PostFilter> getGlobalFilters() {
+ return globalFilters;
+ }
+
+ public void removeFilter(List<PostFilter> filters, PostFilter filter) {
+ filters.remove(filter);
+ }
+
private void save() {
// Saving feeds and filters
Map<Feed, PostFilter> currentAggregatedFeeds = getAggregatedFeed().getFeeds();
Modified: trunk/src/action/org/jboss/blog/session/feed/posts/filter/AndFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/AndFilter.java 2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/AndFilter.java 2008-01-14 19:06:51 UTC (rev 171)
@@ -5,6 +5,7 @@
import java.util.List;
import java.util.ArrayList;
+import java.util.Iterator;
/**
* @author <a href="mailto:adam at warski.org">Adam Warski</a>
@@ -39,4 +40,32 @@
return true;
}
+
+ public String toString() {
+ StringBuilder result = new StringBuilder();
+ result.append("And(");
+ for (Iterator<PostFilter> iter = filters.iterator(); iter.hasNext();) {
+ result.append(iter.next().toString());
+ if (iter.hasNext()) {
+ result.append(", ");
+ }
+ }
+
+ return result.append(")").toString();
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof AndFilter)) return false;
+
+ AndFilter andFilter = (AndFilter) o;
+
+ if (filters != null ? !filters.equals(andFilter.filters) : andFilter.filters != null) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return (filters != null ? filters.hashCode() : 0);
+ }
}
Modified: trunk/src/action/org/jboss/blog/session/feed/posts/filter/AuthorRegexpFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/AuthorRegexpFilter.java 2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/AuthorRegexpFilter.java 2008-01-14 19:06:51 UTC (rev 171)
@@ -2,22 +2,64 @@
import org.jboss.blog.model.Post;
import org.jboss.blog.model.post.PostFilter;
+import org.jboss.blog.tools.validator.Regexp;
import java.util.regex.Pattern;
+import java.io.IOException;
/**
* @author <a href="mailto:adam at warski.org">Adam Warski</a>
*/
public class AuthorRegexpFilter implements PostFilter {
private static final long serialVersionUID = 2015864901762113142L;
-
- private Pattern pattern;
- public AuthorRegexpFilter(String regexp) {
- pattern = Pattern.compile(regexp);
+ @Regexp
+ private String regexp;
+
+ private transient Pattern pattern;
+
+ public String getRegexp() {
+ return regexp;
}
+ public void setRegexp(String regexp) {
+ this.regexp = regexp;
+
+ pattern = Pattern.compile(this.regexp);
+ }
+
public boolean filter(Post post) {
return pattern.matcher(post.getAuthor()).matches();
}
+
+ private void writeObject(java.io.ObjectOutputStream out)
+ throws IOException {
+ out.defaultWriteObject();
+ }
+
+ private void readObject(java.io.ObjectInputStream in)
+ throws IOException, ClassNotFoundException {
+ in.defaultReadObject();
+
+ setRegexp(getRegexp());
+ }
+
+ public String toString() {
+ return "Author matching regexp: " + regexp;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof AuthorRegexpFilter)) return false;
+
+ AuthorRegexpFilter that = (AuthorRegexpFilter) o;
+
+ if (regexp != null ? !regexp.equals(that.regexp) : that.regexp != null) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return (regexp != null ? regexp.hashCode() : 0);
+ }
}
Added: trunk/src/action/org/jboss/blog/session/feed/posts/filter/FilterAddBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/FilterAddBean.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/FilterAddBean.java 2008-01-14 19:06:51 UTC (rev 171)
@@ -0,0 +1,55 @@
+package org.jboss.blog.session.feed.posts.filter;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.ScopeType;
+import org.jboss.blog.model.post.PostFilter;
+
+import java.util.List;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("filterAdd")
+ at Scope(ScopeType.CONVERSATION)
+public class FilterAddBean {
+ private List<PostFilter> addToList;
+
+ private PodcastFilter podcastFilter;
+
+ private NotPodcastFilter notPodcastFilter;
+
+ private AuthorRegexpFilter authorRegexpFilter;
+
+ public PodcastFilter getPodcastFilter() {
+ if (podcastFilter == null) {
+ podcastFilter = new PodcastFilter();
+ }
+
+ return podcastFilter;
+ }
+
+ public NotPodcastFilter getNotPodcastFilter() {
+ if (notPodcastFilter == null) {
+ notPodcastFilter = new NotPodcastFilter();
+ }
+
+ return notPodcastFilter;
+ }
+
+ public AuthorRegexpFilter getAuthorRegexpFilter() {
+ if (authorRegexpFilter == null) {
+ authorRegexpFilter = new AuthorRegexpFilter();
+ }
+
+ return authorRegexpFilter;
+ }
+
+ public void add(PostFilter filter) {
+ addToList.add(filter);
+ }
+
+ public void addToList(List<PostFilter> addToList) {
+ this.addToList = addToList;
+ }
+}
Modified: trunk/src/action/org/jboss/blog/session/feed/posts/filter/NotPodcastFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/NotPodcastFilter.java 2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/NotPodcastFilter.java 2008-01-14 19:06:51 UTC (rev 171)
@@ -12,4 +12,19 @@
public boolean filter(Post post) {
return post.getEnclosures() == null || post.getEnclosures().size() == 0;
}
+
+ public String toString() {
+ return "No enclosure (not a podcast entry)";
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof NotPodcastFilter)) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return NotPodcastFilter.class.hashCode();
+ }
}
Modified: trunk/src/action/org/jboss/blog/session/feed/posts/filter/PodcastFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/PodcastFilter.java 2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/PodcastFilter.java 2008-01-14 19:06:51 UTC (rev 171)
@@ -12,4 +12,19 @@
public boolean filter(Post post) {
return post.getEnclosures() != null && post.getEnclosures().size() != 0;
}
+
+ public String toString() {
+ return "With enclosure (a podcast entry)";
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof PodcastFilter)) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return PodcastFilter.class.hashCode();
+ }
}
Modified: trunk/src/action/org/jboss/blog/session/feed/posts/filter/TotalFilter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/filter/TotalFilter.java 2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/filter/TotalFilter.java 2008-01-14 19:06:51 UTC (rev 171)
@@ -12,4 +12,19 @@
public boolean filter(Post post) {
return true;
}
+
+ public String toString() {
+ return "Everything";
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof TotalFilter)) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ return TotalFilter.class.hashCode();
+ }
}
Modified: trunk/src/action/org/jboss/blog/session/update/UpdateManager.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/update/UpdateManager.java 2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/src/action/org/jboss/blog/session/update/UpdateManager.java 2008-01-14 19:06:51 UTC (rev 171)
@@ -17,6 +17,6 @@
@Observer("org.jboss.blog.postBlogInit")
public void register() {
// TODO: add monitor and configurable intervals
- updateHandler.update(new Date(System.currentTimeMillis() + 3000), 60000 * 10);
+ // updateHandler.update(new Date(System.currentTimeMillis() + 3000), 60000 * 10);
}
}
Modified: trunk/src/model/org/jboss/blog/model/feed/AggregatedFeed.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/feed/AggregatedFeed.java 2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/src/model/org/jboss/blog/model/feed/AggregatedFeed.java 2008-01-14 19:06:51 UTC (rev 171)
@@ -7,6 +7,7 @@
import javax.persistence.Entity;
import javax.persistence.Basic;
+import javax.persistence.Lob;
import java.util.Map;
/**
@@ -16,10 +17,12 @@
public class AggregatedFeed extends Feed {
@CollectionOfElements
@MapKeyManyToMany
+ @Lob
private Map<Feed, PostFilter> feeds;
@NotNull
@Basic
+ @Lob
private PostFilter globalFilter;
public Map<Feed, PostFilter> getFeeds() {
Added: trunk/src/tools/org/jboss/blog/tools/validator/Regexp.java
===================================================================
--- trunk/src/tools/org/jboss/blog/tools/validator/Regexp.java (rev 0)
+++ trunk/src/tools/org/jboss/blog/tools/validator/Regexp.java 2008-01-14 19:06:51 UTC (rev 171)
@@ -0,0 +1,16 @@
+package org.jboss.blog.tools.validator;
+
+import org.hibernate.validator.ValidatorClass;
+
+import java.lang.annotation.*;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at ValidatorClass(RegexpValidator.class)
+ at Target({ElementType.FIELD, ElementType.METHOD})
+ at Retention(RetentionPolicy.RUNTIME)
+ at Documented
+public @interface Regexp {
+ String message() default "must be a valid regular expression";
+}
Added: trunk/src/tools/org/jboss/blog/tools/validator/RegexpValidator.java
===================================================================
--- trunk/src/tools/org/jboss/blog/tools/validator/RegexpValidator.java (rev 0)
+++ trunk/src/tools/org/jboss/blog/tools/validator/RegexpValidator.java 2008-01-14 19:06:51 UTC (rev 171)
@@ -0,0 +1,36 @@
+package org.jboss.blog.tools.validator;
+
+import org.hibernate.validator.PropertyConstraint;
+import org.hibernate.validator.Validator;
+import org.hibernate.mapping.Property;
+
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public class RegexpValidator implements Validator<Regexp>, PropertyConstraint {
+ public void initialize(Regexp parameters) { }
+
+ public boolean isValid(Object value) {
+ if (value == null) {
+ return true;
+ }
+
+ if (!(value instanceof String)) {
+ return false;
+ }
+
+ String string = (String) value;
+
+ try {
+ Pattern.compile(string);
+ return true;
+ } catch (PatternSyntaxException e) {
+ return false;
+ }
+ }
+
+ public void apply(Property property) { }
+}
\ No newline at end of file
Modified: trunk/view/manage/aggregated/aggregated_mod.xhtml
===================================================================
--- trunk/view/manage/aggregated/aggregated_mod.xhtml 2008-01-11 18:35:10 UTC (rev 170)
+++ trunk/view/manage/aggregated/aggregated_mod.xhtml 2008-01-14 19:06:51 UTC (rev 171)
@@ -7,29 +7,62 @@
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
xmlns:a="http://richfaces.org/a4j">
+
<h:form>
<h:panelGrid columns="1">
<h:outputLabel>Please select feeds to include:</h:outputLabel>
<h:panelGroup>
- <h:dataTable value="#{aggregatedFeedMod.availableFeeds}" var="feed">
+ <h:dataTable value="#{aggregatedFeedMod.availableFeeds}" var="feed" id="availableFeedsTable">
<h:column>
- <h:selectBooleanCheckbox value="#{aggregatedFeedMod.selectedFeeds[feed]}" />
+ <h:selectBooleanCheckbox value="#{aggregatedFeedMod.selectedFeeds[feed]}">
+ <a:support event="onclick" reRender="availableFeedsTable" />
+ </h:selectBooleanCheckbox>
#{feed.name}
</h:column>
<h:column>
- <h:panelGroup rendered="">
+ <h:panelGroup rendered="#{aggregatedFeedMod.selectedFeeds[feed]}">
+ <h5>Local filters, applied only to this feed:</h5>
+ <h:dataTable value="#{aggregatedFeedMod.selectedFeedsFilters[feed]}" var="filter">
+ <h:column>
+ #{filter}
+ </h:column>
+ <h:column>
+ <h:commandButton
+ action="#{aggregatedFeedMod.removeFilter(aggregatedFeedMod.selectedFeedsFilters[feed],filter)}"
+ value="Remove" />
+ </h:column>
+ </h:dataTable>
+ <h:commandLink action="#{filterAdd.addToList(aggregatedFeedMod.selectedFeedsFilters[feed])}"
+ value="Add filter" />
</h:panelGroup>
</h:column>
</h:dataTable>
</h:panelGroup>
+ <h3>Global filters, applied to all feeds; this feed will only contain entries, satisfying:</h3>
+
+ <h:panelGroup>
+ <h:dataTable value="#{aggregatedFeedMod.globalFilters}" var="filter">
+ <h:column>
+ #{filter}
+ </h:column>
+ <h:column>
+ <h:commandButton
+ action="#{aggregatedFeedMod.removeFilter(aggregatedFeedMod.globalFilters,filter)}"
+ value="Remove" />
+ </h:column>
+ </h:dataTable>
+
+ <h:commandLink action="#{filterAdd.addToList(aggregatedFeedMod.globalFilters)}" value="Add filter" />
+ </h:panelGroup>
+
<h:panelGroup id="proceed">
<h:commandButton rendered="#{new}" value="Next »"
- action="#{aggregatedFeedMod.saveNew}" />
+ action="#{aggregatedFeedMod.saveNew}" />
<h:commandButton rendered="#{!new}" value="Save"
- action="#{aggregatedFeedMod.saveExisting}" />
+ action="#{aggregatedFeedMod.saveExisting}" />
<s:button value="Cancel" view="/manage/index.xhtml" propagation="end" />
</h:panelGroup>
</h:panelGrid>
Added: trunk/view/manage/aggregated/filter_add.xhtml
===================================================================
--- trunk/view/manage/aggregated/filter_add.xhtml (rev 0)
+++ trunk/view/manage/aggregated/filter_add.xhtml 2008-01-14 19:06:51 UTC (rev 171)
@@ -0,0 +1,49 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:s="http://jboss.com/products/seam/taglib"
+ 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:rich="http://richfaces.org/rich"
+ xmlns:a="http://richfaces.org/a4j"
+ template="../../layout/template.xhtml">
+ <ui:define name="body">
+ <h1>Add a filter feed</h1>
+
+ <h:panelGroup>
+ <h5>Only entries with enclosures filter (podcast)</h5>
+ <h:form>
+ <h:commandButton value="Add" action="#{filterAdd.add(filterAdd.podcastFilter)}"/>
+ </h:form>
+ </h:panelGroup>
+
+ <h:panelGroup>
+ <h5>Only entries without enclosure filter (not-podcast)</h5>
+ <h:form>
+ <h:commandButton value="Add" action="#{filterAdd.add(filterAdd.notPodcastFilter)}"/>
+ </h:form>
+ </h:panelGroup>
+
+ <h:panelGroup>
+ <h5>Only entries whose author matches a regular expression</h5>
+ <h:form>
+ <h:panelGrid>
+ <h:outputLabel for="author"><span class="required">*</span> Regular expression:</h:outputLabel>
+ <h:panelGroup>
+ <h:inputText id="author" value="#{filterAdd.authorRegexpFilter.regexp}" required="true" size="16">
+ <a:support event="onblur" reRender="authorMessage" ajaxSingle="true" bypassUpdates="true"/>
+ <s:validate />
+ </h:inputText>
+
+ <a:outputPanel id="authorMessage">
+ <h:message for="author" styleClass="error" />
+ </a:outputPanel>
+ </h:panelGroup>
+
+ <h:commandButton value="Add" action="#{filterAdd.add(filterAdd.authorRegexpFilter)}"/>
+ </h:panelGrid>
+ </h:form>
+ </h:panelGroup>
+ </ui:define>
+</ui:composition>
More information about the jboss-cvs-commits
mailing list