SlideShare a Scribd company logo
Rich Portlet
                                                                   Development

                                                                                                            Jennifer Bourey
                                               Jasig Spring Conference, March 9, 2010



© Copyright Unicon, Inc., 2006. This work is the intellectual property of Unicon, Inc. Permission is granted for this material to be shared for non-
commercial, educational purposes, provided that this copyright statement appears on the reproduced materials and notice is given that the copying is
by permission of Unicon, Inc. To disseminate otherwise or to republish requires written permission from Unicon, Inc.
Portlet Development Goals

• Make
 – life easier
 – development faster
 – portlets shinier
Create an Accessible 2-Column Layout
Accessible Two-Column Layout

Recommended for you

Introducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and serverIntroducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and server

Rendr is a JavaScript library that allows Backbone.js applications to run on both the client and server sides. It provides common classes and logic that can be reused across both environments, such as BaseView, BaseModel, and routers. On the server, it renders the HTML output using the same application logic. On the client, it hydrates the views by attaching them to the corresponding DOM elements. The goal is to write application logic in a way that is agnostic to the environment, avoiding duplicating code or context switching between client and server implementations.

node.jsrendrjavascript
Building Cross Platform Mobile Web Apps
Building Cross Platform Mobile Web AppsBuilding Cross Platform Mobile Web Apps
Building Cross Platform Mobile Web Apps

Frameworks like Sencha Touch are heralding a new way of building mobile services using Javascript, HTML5 and CSS3. If you want to discover how to use standard web technologies to reach your mobile users in beautiful app-like ways, this session is for you. We explore the possibilities that each of these rich, standards-based libraries can bring, we show how the mobile device is fast becoming a first-class Javascript run-time environment, and we discuss how we might be on the dawn of a new web age, where mobile and client-side applications can immerse billions of users with exciting, contextually-aware experiences.

appsveronahtml5
Jsf presentation
Jsf presentationJsf presentation
Jsf presentation

Java Server Faces (JSF) is a component-based MVC framework for building user interfaces in Java web applications. JSF provides UI components that can be used in JSP or Facelets views. It follows a request response lifecycle where the controller handles gathering input, validating, updating models, and rendering responses. Popular JSF components include inputs, outputs, selects, forms, and commands. Facelets is the default view technology in JSF 2 and provides templating capabilities. Key differences between JSF and JSF 2 include replacing JSP with Facelets and adding Ajax and annotation support. Spring MVC has the highest demand and documentation quality while Struts 2 has the lowest learning curve and JSF is in

Using the Fluid Skinning System
<div class="fl-col-flex2">

    
    <div class="fl-col">

         <h1>I'm the left column!</h1>

    </div>



    
    <div class="fl-col">

         <h1>I'm the right column!</h1>

    </div>

</div>
Accessible Two-Column Layout




     fl-col                  fl-col


              fl-col-flex2
Fluid Skinning System

• Layout wrappers and containers
• Convenience classnames
  – GUI elements: Tabs, menus, icons, widgets
  – font family, size, and formatting

• Theming
• Accessibility
  – easy page linearization
  – tested for usabiltity effectiveness, specifically
    colorblindness
  – works with Assistive Technology
Allow Users to Page Through a List

Recommended for you

A Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 RevolutionA Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 Revolution

The document discusses the evolution of HTML5 and mobile applications. It notes that HTML5 allows building applications that work across different devices using a single codebase, but that native apps still have advantages in terms of performance and access to device functionality. Hybrid apps use a native wrapper and WebView to bridge this gap by allowing HTML5 apps to access device APIs while retaining cross-platform capabilities. Overall the document examines the tradeoffs between different mobile app approaches.

html5livesencha touchhtml5
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010Hyperproductive JSF 2.0 @ JavaOne Brazil 2010
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010

The presentation outlines new features in JSF 2.0 including Facelets for better templating and error handling, composite components for reusable UI components, integrated Ajax capabilities, partial state saving for smaller page sizes, view parameters for passing request parameters to managed beans, system events for lifecycle hook points, and resources for images, JavaScript and CSS. It also discusses annotations replacing XML configuration and project stages for development vs production.

netbeansjsfjavaserverfaces
HTML5: the new frontier of the web
HTML5: the new frontier of the webHTML5: the new frontier of the web
HTML5: the new frontier of the web

The document discusses various technologies for building web applications, including HTML5. It begins by explaining the anatomy of a web app, including the server-side components and use of backend services. It then covers different types of apps - native, web, and hybrid. A large portion of the document focuses on HTML5, describing new structural elements, forms, multimedia capabilities like audio and video, local storage options, and geolocation. It concludes by mentioning technologies like PhoneGap/Cordova for building cross-platform apps and WebSockets for real-time connections.

html5mobile application developmentgoogle chrome
Paging Through a List
More from Fluid Infusion

• Components
  – Pager
  – Reorderers (list, grid, and image)
  – Uploader
  – Progressbar
  – Inline text edit

• http://fluidproject.org/releases/1.1.2/demos/
Allow Users to Select a Date
Selecting a Date

Recommended for you

Java server faces
Java server facesJava server faces
Java server faces

This document introduces Java Server Faces (JSF), a server-side user interface framework. It discusses JSF's architecture, which follows the MVC pattern. The UI component model in JSF includes components, events, validators, converters, and navigation support. Developing a JSF application involves creating managed beans, defining pages with JSF tags, configuring navigation in faces-config.xml, and setting up the web.xml file. JSF applications use a request processing lifecycle to handle requests and render responses.

jsftutorialjava
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012 Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012

The document discusses how remote apps allow developers to integrate third party applications into Atlassian's OnDemand service. Remote apps use a simple descriptor file to register the app and define things like permissions, pages, and macros. This avoids the complexity of developing plugins and allows apps to be built using any programming language. Examples are provided of how to create a Lucidchart diagramming app using remote apps.

CQ Provisionning & Authoring
CQ Provisionning & AuthoringCQ Provisionning & Authoring
CQ Provisionning & Authoring

Adobe Experience Manager (CQ) Provisionning & Authoring §1 Authentication - Best Practices - Authentication Handler - Login Module §2 Resource Provisioning - Best Practices - Blueprints - From Actions & Workflows §3 Author Scalability - Vertical - Horizontal

cq5adobe experience managerauthoring
jQuery UI Datepicker
<div>
    <label>Start date:</label>
    <input class="cal-datepicker"></input>
</div>

<script type="text/javascript">
    $(document).ready(function(){
        $(".cal-datepicker").datepicker();
    });
</script>
jQuery UI Widgets

• Widgets
  – Accordion
  – Datepicker
  – Dialog
  – Progressbar
  – Slider
  – Tabs

• Demos: http://jqueryui.com/demos/
Use Javascript Effects
jQuery Effects

Recommended for you

Java Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App EngineJava Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App Engine

Google App Engine is a platform for hosting web applications in Google's data centers. It allows developers to build applications on scalable infrastructure without having to manage servers. Key features include automatic scaling, high availability, easy deployment, and built-in services like Datastore, Memcache and Task Queue. The development process involves using the App Engine SDK, which includes a local development server that emulates the live environment. Applications are deployed to App Engine by uploading the compiled code.

java web programminggoogle app enginecloud computing
Introduction to jsf 2
Introduction to jsf 2Introduction to jsf 2
Introduction to jsf 2

JSF 2 life cycle consists of 6 phases: restore view, apply request values, process validations, update model values, invoke application, and render response. Managed beans are JavaBeans that can be accessed from JSF pages and are used to store data. Facelets is the templating language used by JSF 2 that replaced JSP. Navigation between pages can be done through configuration, implicit navigation based on action outcomes, or redirection. New features in JSF 2.2 include faces flows for page flows, HTML5 support, and a file upload component.

jsf2jsf 2java server faces
Java Web Programming on Google Cloud Platform [2/3] : Datastore
Java Web Programming on Google Cloud Platform [2/3] : DatastoreJava Web Programming on Google Cloud Platform [2/3] : Datastore
Java Web Programming on Google Cloud Platform [2/3] : Datastore

This document provides an introduction to Google App Engine Datastore and using JPA with Datastore. It describes Datastore as a schema-less database that stores entities composed of properties. It discusses Datastore operations, the storage model, and compares Datastore to relational databases. It also covers setting up JPA, example entity and query code, and transaction management. Unsupported JPA features on Datastore are also listed.

java web programminggoogle app enginecloud computing
jQuery UI

• Effects
  – show, hide, toggle, color animation
  – add/remove/toggle/switch css class

• Demos: http://jqueryui.com/demos/
Improve Javascript Performance
Improve UI Performance

• Minify code
• Minimize HTTP requests
• Apply cache headers
• GZip resources
Jasig Resource Server

• Server Webapp
  – Library of popular CSS, JS, and image resources
  – Provide consistent URLs
  – Cache, minify, and gzip hosted resources

• Utilities
  – Filters for caching and gzipping
  – JSP tag for including files from resource server

• Bundled with uPortal 3.1+

Recommended for you

Java Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
Java Web Programming on Google Cloud Platform [3/3] : Google Web ToolkitJava Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
Java Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit

Google Web Toolkit (GWT) is an open source Java framework that allows web developers to create Ajax applications in Java and deploy them as optimized JavaScript. GWT provides tools for building AJAX applications in Java that are compiled into JavaScript for cross-browser compatibility. It handles browser inconsistencies and integrates with existing Java development tools, allowing developers to build and debug Rich Internet Applications using Java instead of JavaScript.

java web programminggoogle app enginecloud computing
Rest Security with JAX-RS
Rest Security with JAX-RSRest Security with JAX-RS
Rest Security with JAX-RS

This document provides an overview and demonstration of REST security with JAX-RS. It discusses authentication using Java EE and the JAX-RS SecurityContext, as well as encryption and validation. The document demonstrates OAuth authentication for accessing APIs from third party applications using a photo sharing site example. It summarizes when to use OAuth for consuming APIs from web, mobile, and native apps when passwords should not be shared, and the benefits of OAuth which include not needing to share passwords.

security java rest
A Complete Tour of JSF 2
A Complete Tour of JSF 2A Complete Tour of JSF 2
A Complete Tour of JSF 2

This document provides a summary of the major new features in JavaServer Faces (JSF) 2.0, including Facelets as the preferred view declaration language, composite components, Ajax support, partial state saving, view parameters, system events, resources, behaviors, view traversal, annotations, navigation, exceptions, validation, EL improvements, and new scopes. It highlights contributions from the JSF expert group and community and provides resources for learning more about JSF 2.0.

oowjavajsf
Minify code: YUI Maven Plugin
<plugin>
    <groupId>net.sf.alchim</groupId>
    <artifactId>yuicompressor-maven-plugin</artifactId>
    <version>0.7.1</version>
    <executions>
         <execution>
             <goals><goal>compress</goal></goals>
         </execution>
    </executions>
    <configuration>
         <excludes>
             <exclude>**/*.min.js</exclude>
         </excludes>
         <linebreakpos>10000</linebreakpos>
         <suffix>.min</suffix>
         <jswarn>false</jswarn>
    </configuration>
</plugin>
Cache Headers: Resource Server
<filter>
    <filter-name>CacheExpiresFilter</filter-name>
    <filter-class>
         org.jasig.resourceserver.utils.filter.CacheExpirationFilter
    </filter-class>

    
    <init-param>
        <param-name>cacheMaxAge</param-name>
        <param-value>31536000</param-value>
    </init-param>

    
    <init-param>
        <param-name>regenerateHeadersInterval</param-name>
        <param-value>1000</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>CacheExpiresFilter</filter-name>
    <url-pattern>/rs/*</url-pattern>
</filter-mapping>
GZip CSS and JS
<filter>
    <filter-name>pageCachingFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</
filter-class>
    <init-param>
         <param-name>targetFilterLifecycle</param-name>
         <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>pageCachingFilter</filter-name>
    <url-pattern>*.js</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>pageCachingFilter</filter-name>
    <url-pattern>*.css</url-pattern>
</filter-mapping>
GZip CSS and JS
<bean id="cacheManager"
 class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    <property name="cacheManagerName" value="ResourceServer.cacheManager" />
</bean>

<bean id="pageCachingFilter"
 class="org.jasig.resourceserver.utils.cache.ConfigurablePageCachingFilter">
    <constructor-arg ref="cacheManager"/>
    <constructor-arg value="SimplePageCachingFilter"/>
</bean>

Recommended for you

Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dep...
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dep...Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dep...
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dep...

Building Responsive Applications with Uniface: Deployment, part 3 or a 3 part series. In this presentation you will learn: • Web Deployment Architecture • Considerations • Tomcat Servlet Engine Configuration • Uniface Server Configuration • Deployment Demo (View on our YouTube channel) Webinar recording on: www.youtube.com/unifacesme

model driven developmentsecurityenterprise development
Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)

Java Server Faces lecture under the series of Java Enterprise Edition lectures delivered at ECE Paris.

jeejsf
Primefaces Nextgen Lju
Primefaces Nextgen LjuPrimefaces Nextgen Lju
Primefaces Nextgen Lju

Talk on PrimeFaces: Next Generation JSF Component Suite, by Apache MyFaces committer and PMC member, Cagatay Civici.

myfacesprimefacesjava server faces
GZip HTML: Tomcat

<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000" redirectPort="8443"
    emptySessionPath="true"
    compression="on"
    compressableMimeType="text/html,text/xml,text/plain" />
Before
After
Interact with Portlet Session and
      Preferences via AJAX

Recommended for you

Primefaces Nextgen Lju
Primefaces Nextgen LjuPrimefaces Nextgen Lju
Primefaces Nextgen Lju

PrimeFaces is a next generation JavaServer Faces (JSF) component suite that provides 70+ rich UI components and features like Ajax push technology. It was created by Cagatay Civici in 2008 and is now used by thousands of developers worldwide. Some key features include easy Ajax implementation, unobtrusive JavaScript, mobile frameworks like TouchFaces, and integration with technologies like Spring and Portlets. The documentation and community support resources make it easy for developers to learn and use PrimeFaces in their projects.

primefacesjava server facesjsf
Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014

This document provides an overview of Xitrum, an asynchronous and clustered Scala web framework built on top of Netty and Akka. It describes what Xitrum is, why it should be used, how it works, examples of its features like actions, views, routing, authentication, and more. It also provides links to the Xitrum homepage, guides, community, and examples of where Xitrum is used in production.

scalaakkahazelcast
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディングXitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング

Xitrum is an asynchronous and clustered Scala web framework and HTTP server built on top of Netty and Akka. It is feature-rich, easy to use, and high performance. Xitrum can scale to a cluster of servers using Akka Cluster and Hazelcast. It is used in production systems in various countries. The document provides information on Xitrum's architecture, features, annotations, and examples of actions and SockJS messaging.

programmingscala
AJAX Servlet


                          Portlet
                         Controller
Browser



                          Servlet
                         Controller



            No portlet preferences access
            No portlet session access
Jasig Ajax Portlet Support



                   Portlet
Browser
                  Controller




                   Servlet
                  Controller
Jasig Ajax Portlet Support
Weather Portlet Example

• Save location preferences via AJAX POST
• Return success or failure

Recommended for you

ASP.NET Overview - Alvin Lau
ASP.NET Overview - Alvin LauASP.NET Overview - Alvin Lau
ASP.NET Overview - Alvin Lau

This document provides an overview of ASP.NET 4+ and ASP.NET MVC 3. It discusses the following key points: - Advancements in ASP.NET 4.0 including improvements to core services, Ajax, web forms, dynamic data, and web application deployment. - An introduction to ASP.NET MVC 3 including the new Razor view engine, controller improvements, model validation enhancements, and scaffolding improvements. - A question and answer session to discuss the topics covered.

Easy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMix
Easy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMixEasy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMix
Easy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMix

This document discusses Apache Camel, an open source framework for integration patterns and enterprise integration. It provides examples of how to use Camel to implement common integration patterns like message filtering, routing, and transformation using XML configuration or Java code. It also explains how to use Camel with other technologies like ActiveMQ, Spring, and ServiceMix.

apache camel activemq servicemix 2007
AnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFacesAnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFaces

PrimeFaces, JavaServer Faces icin gelistirllen ve dunya capinda populer olan zengin bir arayuz kutuphanesidir. Bu sunumda PrimeFaces Bilesenleri, Mobil, Ajax Push, Tema Destegi gibi modullerin yani sira PrimeFaces ekibinin gelistirdigi yeni jQuery javascript kutuphanesi PrimeUI'da tanitilmaktadir.

primecagatayprimefaces
Editing Portlet Preferences via Ajax
@RequestMapping(params = {"action=delete"})
public void deleteCity(
        @RequestParam(value = "locationCode") String locationCode,
        ActionRequest request, ActionResponse response) throws Exception {

    Map<Object, Object> model = new HashMap<Object, Object>();

    // remove location from preferences
    final PortletPreferences prefs = request.getPreferences();
    this.weatherService.deleteWeatherLocation(prefs, locationCode);

    // return success
    model.put("status", "success");
    this.ajaxPortletSupport
            .redirectAjaxResponse("ajax/json", model, request, response);
}
Ajax Response Controller
@Controller
public class AjaxResponseController {

    private AjaxPortletSupport ajaxPortletSupport;

    @Autowired
    public void setAjaxPortletSupport(
            AjaxPortletSupport ajaxPortletSupport) {
        this.ajaxPortletSupport = ajaxPortletSupport;
    }

    @RequestMapping("/json")
    public ModelAndView renderAjaxResponse(HttpServletRequest request,
            HttpServletResponse response)
            throws ServletRequestBindingException, IOException {

        final Map<Object, Object> model = this.ajaxPortletSupport
                .getAjaxModel(request, response);

        return new ModelAndView("jsonView", model);
    }
}
Proxy an AJAX Target
Jasig Dictionary Portlet

• Uses Aonaware Dictionary XML REST service
• Want to make AJAX requests DictService server
• Single Origin Policy prevents request
  – need same protocol, domain, and port

Recommended for you

Intro to JavaScript
Intro to JavaScriptIntro to JavaScript
Intro to JavaScript

This document provides an introduction to JavaScript including: - JavaScript is an object-oriented scripting language that is a dialect of ECMAScript. - It was originally designed to add interactivity to HTML pages through dynamic HTML, reacting to events, and data validation. - JavaScript is now heavily used in AJAX-based sites to asynchronously retrieve and display data without reloading pages. - The document discusses JavaScript compatibility issues and provides examples of basic JavaScript concepts like variables, comparisons, repetition, and popup boxes.

RichFaces: rich:* component library
RichFaces: rich:* component libraryRichFaces: rich:* component library
RichFaces: rich:* component library

1) This webinar reviewed JBoss RichFaces, a library of AJAX-enabled UI components for JavaServer Faces applications. 2) It covered basic concepts like partial view rendering and processing. It also demonstrated many of the rich UI components in the rich:* tag library. 3) Recent updates to RichFaces were highlighted, including new components in version 3.3.1 like rich:colorPicker and themes with predefined layouts. 4) Future plans for RichFaces 4.0 were discussed, which will integrate fully with JSF 2.0 and focus on consistency and performance.

richfaceswebinar
Primefaces Confess 2012
Primefaces Confess 2012Primefaces Confess 2012
Primefaces Confess 2012

This document provides information about Çagatay Çivici and PrimeFaces. Çagatay Çivici is a JSF expert group member and lead of PrimeFaces. PrimeFaces is an open source Java server faces component library developed by PrimeTeknoloji, where Çagatay is a co-founder. The document outlines features of PrimeFaces like being lightweight, easy to use, supporting over 100 UI components, and advanced Ajax capabilities.

primefaces jsf
Using Jasig’s ProxyView

@RequestMapping(method = RequestMethod.GET)
public ModelAndView getProxyView(HttpServletRequest request,
         @RequestParam(value="searchTerm") String searchTerm) {

    Map<String, Object> model = new HashMap<String, Object>();

    // build the URL to be proxied and add it to our model
    String url = “http://www.proxied.com/url”;
    model.put(ProxyView.URL, url.toString());

    // return a proxy view of the URL
    return new ModelAndView("proxyView", map);

}
Prevent Cross-side Scripting Attacks
Cross-Site Scripting
Unescaped Javascript


<script type="text/javascript">
    document.write('${title}');
</script>




<script type="text/javascript">
    document.write('' + alert('pwnd!') + '');
</script>

Recommended for you

Ride on the Fast Track of Web with Ruby on Rails- Part 2
Ride on the Fast Track of Web with Ruby on Rails- Part 2Ride on the Fast Track of Web with Ruby on Rails- Part 2
Ride on the Fast Track of Web with Ruby on Rails- Part 2

Ruby on Rails is a web application framework that follows the model-view-controller (MVC) pattern. It uses RESTful routing and conventions to map HTTP verbs like GET and POST to controller actions. Models define the data and behavior of an application, controllers handle and respond to user input, and views display the UI for users. Rails emphasizes conventions over configuration for productivity and includes features like caching, asset pipelining, and internationalization.

ruby on rails
Play vs Rails
Play vs RailsPlay vs Rails
Play vs Rails

Play Framework and Ruby on Rails are web application frameworks that help developers build web applications. Both frameworks provide tools and libraries for common tasks like routing, database access, templates and more. Some key similarities include using MVC patterns, supporting SQL/NoSQL databases via libraries, and including tools for unit testing and deployment. Some differences are Play uses Scala and Java while Rails uses Ruby, and they have different project structures and ways of handling assets, templates and dependencies. Both aim to help developers build web applications faster with their features and ecosystem of supporting libraries.

playplay frameworkrails
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overview

Rails 3 provides a concise overview of changes in Rails 3 including maintaining MVC structure and RESTful routing while improving areas like file structure, block helpers, routing and constraints, ActiveRecord querying, resources routing, and ActionMailer delivery. Key changes include a more Rack-like implementation, chainable ActiveRecord scopes, and pagination and layout support in ActionMailer.

rails3posscon
Escaped Javascript

<script type="text/javascript">
    document.write('<spring:escapeBody
     javaScriptEscape="true">${title}</spring:escapeBody>');
</script>




<script type="text/javascript">
    document.write('' + alert('pwnd!') + '');
</script>
Unescaped HTML


<h1>
    ${ title }
</h1>




<h1>
    <script type="text/javascript">alert('pwnd!');</script>
</h1>
Escaped HTML

<h1>
    <spring:escapeBody htmlEscape="true">
        ${ title }
    </spring:escapeBody>
</h1>




<h1>
    &lt;script type="text/javascript"&gt;alert
('pwnd!');&lt;/script&gt;
</h1>
XSS: Dictionary Portlet
// parse the definition from the response
in = get.getResponseBodyAsStream();
String def = service.getDefinitionFromXml(in);

// escape any HTML characters
return StringEscapeUtils.escapeHtml(def);

Recommended for you

Servlet 3.0
Servlet 3.0Servlet 3.0
Servlet 3.0

Servlet 3.0 is an update to the Java Servlet specification that includes several new features such as annotations for declaring servlets, filters, and listeners; web fragments for modular deployment configurations; dynamic registration of servlets and filters; programmatic login; asynchronous processing; and multipart file upload support. It aims to simplify configuration, improve extensibility and enable new programming patterns for servlet-based applications.

Html5 For Jjugccc2009fall
Html5 For Jjugccc2009fallHtml5 For Jjugccc2009fall
Html5 For Jjugccc2009fall

HTML5 introduces new semantic elements like article, header, nav, and section that divide the content into meaningful regions. It also defines new multimedia elements such as video, audio, and canvas. New form input types and attributes are added for validation. The Canvas API allows dynamic drawing via scripting. The Drag and Drop API supports dragging and dropping elements. Other HTML5 APIs include Geolocation, Web Storage, and Web Workers. Overall, HTML5 provides a powerful set of features for building robust, dynamic web applications.

html5jjug
18CSC311J Web Design and Development UNIT-3
18CSC311J Web Design and Development UNIT-318CSC311J Web Design and Development UNIT-3
18CSC311J Web Design and Development UNIT-3

Web Design and Development, UNIT-3, SRM University, VI Semester, Regulation 2018

srmr2018wdd
XSS: News Reader Portlet

• Display RSS feeds in a portlet
• Allow HTML, but maintain security
• Might need different policies for different sites
OWASP AntiSamy

• Java API for filtering HTML/CSS
• Define allowed tags and attributes through XML
• Clean input by stripping unwanted tags
  – strip malicious scripts from external content
  – improve presentation by removing images, etc.
News Reader: OWASP AntiSamy
// retrieve
InputStream in = get.getResponseBodyAsStream();

//parse
SyndFeed feed = input.build(new XmlReader(in));

//clean
AntiSamy as = new AntiSamy();

List<SyndEntry> a = feed.getEntries();

for (SyndEntry entry : a) {
    SyndContent description = entry.getDescription();

    Policy policy = Policy.getInstance(policyFile);

    CleanResults cr = as.scan(description.getValue(), policy);
    description.setValue(cr.getCleanHTML());
    entry.setDescription(description);
    log.info("Feed " + url + " cleaned in " +
            cr.getScanTime() + " seconds");

}
XSS: Calendar Portlet

• Custom AntiSamy JSP tag
• Wraps Spring-configured string cleaning utility

 <antisamy:clean value="${ event.description.value }"/>

Recommended for you

RESTful Web Applications with Apache Sling
RESTful Web Applications with Apache SlingRESTful Web Applications with Apache Sling
RESTful Web Applications with Apache Sling

Sling is a RESTful web framework for building applications on top of Apache Jackrabbit. It allows resources like content, configurations, code, and binaries to be accessed over REST URLs. Sling maps URLs to resources rather than commands, supports various scripting languages as servlets, and has a modular OSGi-based architecture powered by Apache Felix. Examples shown include building a blog and coffee ordering application on Sling to demonstrate how it supports RESTful content creation and management.

slingjcrapache
Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011

The document provides an overview and code snippets for an Eagles 2011 NFL Draft mobile app created with Sencha Touch. It discusses challenges faced like learning Sencha Touch, displaying live updates, and adapting images for different screen sizes. Lessons learned include destroying DOM elements when done, establishing post-launch content parameters, and using background-size for images. The document also discusses tooling, dependencies, and best practices for mobile development.

extjssasssencha
Bonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsBonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node js

This document discusses best practices for developing Node.js applications. It recommends using frameworks like Express for building web apps, libraries like Async to avoid callback hell, and organizing code into modular sub-applications. It also covers testing, error handling, documentation, and open-sourcing projects. Standards like Felix's Style Guide and domain-driven design principles are advocated. Communication channels like events, HTTP APIs, and WebSockets are examined.

nodejsjavascript
AntiSamy-based String Cleaning

// clean a string using the configured AntiSamy file
public String getCleanString(String dirtyInput) throws ScanException,
                  PolicyException {

        AntiSamy as = new AntiSamy();
        CleanResults cr = as.scan(dirtyInput, this.policy);
        return cr.getCleanHTML();

}
AntiSamy-based JSP Tag
<%@ tag isELIgnored="false" dynamic-attributes="attributes" body-
content="empty" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ attribute name="value" required="true" %>
<%@ tag import="org.springframework.web.context.WebApplicationContext" %>
<%@ tag
import="org.springframework.web.context.support.WebApplicationContextUtils"
%>
<%@ tag import="org.jasig.portlet.calendar.util.StringCleaningUtil" %>
<%
    WebApplicationContext ctx =
        WebApplicationContextUtils.getWebApplicationContext(application);
    StringCleaningUtil util =
        (StringCleaningUtil) ctx.getBean("stringCleaningUtil");
%>
<%= util.getCleanString(value) %>
Preventing Non-Portlet Access

HttpSession session = request.getSession(false);
if (session == null ||
        !((Boolean) session.getAttribute("hasDictionarySession"))) {
    return new ModelAndView("jsonView", map);
}
Work with JSON and XML

Recommended for you

Spine.js
Spine.jsSpine.js
Spine.js

Spine.js is a client-side MVC framework that is primarily JavaScript but can also be used with Node. It uses prototypal inheritance and controllers based on the Backbone.js API. Models support events for CRUD operations and can be persisted using HTML5 local storage. The framework includes routing based on URL hashes and supports templating views and keeping models and views in sync.

Migrating a 1M+ LOC project from AngularJS to Angular
Migrating a 1M+ LOC project from AngularJS to AngularMigrating a 1M+ LOC project from AngularJS to Angular
Migrating a 1M+ LOC project from AngularJS to Angular

This document discusses strategies for translating AngularJS (ng1) templates and components to Angular (ng2). It provides examples of converting ng1 directives like ng-repeat and ng-if to their ng2 equivalents like *ngFor and *ngIf. It also covers upgrading ng1 services and dependencies to ng2, handling routing differences, testing upgrades, and maintaining a consistent UI between versions. The goal is to gradually translate an application from ng1 to ng2 while keeping the UI and behavior largely the same.

angular1 angularjs angular migration upgrade
Getting to Angular 2
Getting to Angular 2Getting to Angular 2
Getting to Angular 2

This document discusses strategies for upgrading a large AngularJS (Angular 1) application to Angular 2 while keeping development ongoing. It describes using ngUpgrade to allow Angular 1 and 2 code to coexist, including downgrading Angular 2 components for use in Angular 1 and upgrading Angular 1 components to work in Angular 2. Lazy loading is also suggested to reduce the cost of migration by loading Angular 2 code on demand. Tips are provided for upgrading directives and handling routing events across both frameworks.

angularangular1angular2
Data as XML

• Javascript parsing
  – jQuery
• Java output and parsing
  – Maven JAXB plugin
  – XStream, etc.
• Groovy
Dictionary Parsing in Groovy
Groovy Implementation
   import java.io.InputStream
   import groovy.xml.StreamingMarkupBuilder
   import org.jasig.portlet.widget.service.IDictionaryParsingService

   class DictionaryParsingServiceImpl implements IDictionaryParsingService {

       String getDefinitionFromXml(InputStream xml) {
           def response = new XmlSlurper().parse(xml)
           return response.Definitions.Definition.WordDefinition
       }

   }



Spring Wiring
   <lang:groovy id="dictionaryParsingService"
   script-source="classpath:org/jasig/portlet/widget/service/
   DictionaryParsingServiceImpl.groovy"/>
Dictionary Parsing in Groovy
import java.io.InputStream
import groovy.xml.StreamingMarkupBuilder
import org.jasig.portlet.widget.service.IDictionaryParsingService

class DictionaryParsingServiceImpl implements IDictionaryParsingService {

    String getDefinitionFromXml(InputStream xml) {
        def response = new XmlSlurper().parse(xml)
        return response.Definitions.Definition.WordDefinition
    }

}
Data as JSON

• Javascript parsing
  – jQuery
• Java output and parsing
  – JSONlib
  – net.sf.json’s JsonView

Recommended for you

Delivering Mobile Course Content with uMobile
Delivering Mobile Course Content with uMobileDelivering Mobile Course Content with uMobile
Delivering Mobile Course Content with uMobile

The document discusses the uMobile Courses module, which allows students to access course information like titles, codes, locations, and grades on mobile devices. It summarizes key features like listing courses by semester, deep linking to other modules, and a courses portlet API. It also describes how the module merges course data from multiple sources like learning management systems and student information systems. The document outlines upcoming features like public course listings, configurable authentication, and integration with additional tools.

campusumobileuportal
uMobile: Jasig-Sakai 2012
uMobile: Jasig-Sakai 2012uMobile: Jasig-Sakai 2012
uMobile: Jasig-Sakai 2012

uMobile is a campus mobile solution developed by Unicon that delivers a rich platform for visitors, students, faculty, staff and alumni through native mobile apps and mobile web. It is built on open source technologies and integrates with existing campus systems through standards and open APIs. uMobile provides personalized and role-based content and experiences while easing development and distribution challenges for higher education institutions.

campusandroidumobile
uMobile: Taking Mobile Applications and Devices to the Next Level
uMobile: Taking Mobile Applications and Devices to the Next LeveluMobile: Taking Mobile Applications and Devices to the Next Level
uMobile: Taking Mobile Applications and Devices to the Next Level

This document summarizes Jennifer Bourey's presentation on uMobile, an open source mobile platform for higher education institutions. uMobile provides a unified experience across native mobile apps and mobile web for students, faculty, staff and visitors. It offers personalized content through authentication and role-based personalization. uMobile is built on the mature Jasig open source portal framework and integrates with existing campus systems through open standards. Its web-centric approach allows content to be developed once and delivered across platforms.

jasig uportal umobile portlet campus mobile univer
JsonView
Controller code
    @RequestMapping("/json")
    public ModelAndView renderAjaxResponse(HttpServletRequest request,
            HttpServletResponse response)
            throws ServletRequestBindingException, IOException {

        final Map<Object, Object> model = this.ajaxPortletSupport
                .getAjaxModel(request, response);

        return new ModelAndView("jsonView", model);
    }



views.xml
    <bean id="jsonView"
            class="net.sf.json.spring.web.servlet.view.JsonView">
        <property name="contentType" value="application/json" />
    </bean>



Response
    { response: success }
Present Different Views
Example: Calendar Portlet

• Three views
  – Mobile View
  – Narrow Column View
  – MAXIMIZED View

• Simple interface for view selection
M
         Calendar Views

                          Column




                          Maximized




Mobile

Recommended for you

Sakai and uPortal 4
Sakai and uPortal 4Sakai and uPortal 4
Sakai and uPortal 4

Sakai 2011 Conference presentation on uPortal 4 and integration with Sakai via the Basic LTI and Sakai Connector portlets.

uportalsakaijasig
uPortal 3.2 And Beyond
uPortal 3.2 And BeyonduPortal 3.2 And Beyond
uPortal 3.2 And Beyond

The document summarizes recent and upcoming changes to the uPortal software. It describes new features in uPortal 3.2 like improved administration tools, mobile device support, and CSS/JS aggregation. It outlines development work for uPortal 3.3 including adding Portlet 2.0 support and removing old channel functionality. It also discusses longer term initiatives such as improving persistence, integrating with Spring Security and Grouper, and adding content management and search capabilities.

uportal jasig portal
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...

Jindong Gu, Zhen Han, Shuo Chen, Ahmad Beirami, Bailan He, Gengyuan Zhang, Ruotong Liao, Yao Qin, Volker Tresp, Philip Torr "A Systematic Survey of Prompt Engineering on Vision-Language Foundation Models" arXiv2023 https://arxiv.org/abs/2307.12980

Calendar View Selection
public String getCalendarViewName(PortletRequest request) {
         String userAgent = request.getProperty("user-agent");

        // check to see if this is a mobile device
        if (this.mobileDeviceRegexes != null && userAgent != null) {
                 for (Pattern regex : this.mobileDeviceRegexes) {
                           if (regex.matcher(userAgent).matches()) {
                                    return CALENDAR_MOBILE_VIEW;
                           }
                 }
        }

        // otherwise check the portlet window state
        WindowState state = request.getWindowState();
        if (WindowState.MAXIMIZED.equals(state)) {
                 return CALENDAR_WIDE_VIEW;
        } else {
                 return CALENDAR_NARROW_VIEW;
        }

}
Mashups
Yale Maps Portlet
Example: SQL Query

Recommended for you

Implementations of Fused Deposition Modeling in real world
Implementations of Fused Deposition Modeling  in real worldImplementations of Fused Deposition Modeling  in real world
Implementations of Fused Deposition Modeling in real world

The presentation showcases the diverse real-world applications of Fused Deposition Modeling (FDM) across multiple industries: 1. **Manufacturing**: FDM is utilized in manufacturing for rapid prototyping, creating custom tools and fixtures, and producing functional end-use parts. Companies leverage its cost-effectiveness and flexibility to streamline production processes. 2. **Medical**: In the medical field, FDM is used to create patient-specific anatomical models, surgical guides, and prosthetics. Its ability to produce precise and biocompatible parts supports advancements in personalized healthcare solutions. 3. **Education**: FDM plays a crucial role in education by enabling students to learn about design and engineering through hands-on 3D printing projects. It promotes innovation and practical skill development in STEM disciplines. 4. **Science**: Researchers use FDM to prototype equipment for scientific experiments, build custom laboratory tools, and create models for visualization and testing purposes. It facilitates rapid iteration and customization in scientific endeavors. 5. **Automotive**: Automotive manufacturers employ FDM for prototyping vehicle components, tooling for assembly lines, and customized parts. It speeds up the design validation process and enhances efficiency in automotive engineering. 6. **Consumer Electronics**: FDM is utilized in consumer electronics for designing and prototyping product enclosures, casings, and internal components. It enables rapid iteration and customization to meet evolving consumer demands. 7. **Robotics**: Robotics engineers leverage FDM to prototype robot parts, create lightweight and durable components, and customize robot designs for specific applications. It supports innovation and optimization in robotic systems. 8. **Aerospace**: In aerospace, FDM is used to manufacture lightweight parts, complex geometries, and prototypes of aircraft components. It contributes to cost reduction, faster production cycles, and weight savings in aerospace engineering. 9. **Architecture**: Architects utilize FDM for creating detailed architectural models, prototypes of building components, and intricate designs. It aids in visualizing concepts, testing structural integrity, and communicating design ideas effectively. Each industry example demonstrates how FDM enhances innovation, accelerates product development, and addresses specific challenges through advanced manufacturing capabilities.

fdmffffused deposition modeling
Manual | Product | Research Presentation
Manual | Product | Research PresentationManual | Product | Research Presentation
Manual | Product | Research Presentation

Manual Method of Product Research | Helium10 | MBS RETRIEVER

product researchhelium10 | mbs retriever
find out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challengesfind out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challenges

accommodate the strengths, weaknesses, threats and opportunities of autonomous vehicles

automotive self-driving car technology
Interesting Web APIs

• Google APIs
  – http://code.google.com/more/
• Yahoo APIs
  – http://developer.yahoo.com/everything.html#apis

• Programmable Web
  – http://www.programmableweb.com/apis

• Many Popular Sites
  – Twitter, YouTube, Last.fm
Personal Favorites

• Google Visualizations
• Google Maps
• Yahoo Stock Data
• Yahoo Weather
• Twitter
Looking Ahead
Spring 3.0

• Portlet 2.0 (JSR-286)
  – Resource URLs: @ResourceMapping
• Spring 3.0
  – REST template
  – JSR-286 support

Recommended for you

What's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptxWhat's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptx

This is a slide deck that showcases the updates in Microsoft Copilot for May 2024

microsoftmicrosoft copilot
Cookies program to display the information though cookie creation
Cookies program to display the information though cookie creationCookies program to display the information though cookie creation
Cookies program to display the information though cookie creation

Java Servlet programs

Advanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly DetectionAdvanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly Detection

Cybersecurity is a major concern in today's connected digital world. Threats to organizations are constantly evolving and have the potential to compromise sensitive information, disrupt operations, and lead to significant financial losses. Traditional cybersecurity techniques often fall short against modern attackers. Therefore, advanced techniques for cyber security analysis and anomaly detection are essential for protecting digital assets. This blog explores these cutting-edge methods, providing a comprehensive overview of their application and importance.

cybersecurityanomaly detectionadvanced techniques
Ajax in JSR-168 and Spring 2.5

JSP/Javascript
   $.get('<c:url value="/ajax/dictionary"/>', {}, function(){}, "json");




Servlet Controller
    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView getDefinition(HttpServletRequest request,
             @RequestParam(value="word") String word,
             @RequestParam(value="dictId") String dict) throws Exception {

         // stuff goes here
         return new ModelAndView("jsonView", map);

    }
Ajax with Jasig Library

JSP/Javascript
   $.get('${dictionaryUrl}', {}, function(){}, "json");




Portlet Controller
    @RequestMapping(params = {"action=delete"})
    public ModelAndView getDefinition(ActionRequest request,
            ActionResponse response, @RequestParam(value="word") String word,
            @RequestParam(value="dictId") String dict) throws Exception {

        // stuff goes here
        this.ajaxPortletSupport
                .redirectAjaxResponse("ajax/json", model, request, response);
    }
Ajax in JSR-286 and Spring 3.0

JSP/Javascript
   $.get('<portlet:resourceURL/>', {}, function(){}, "json");




Portlet Controller
    @ResourceMapping()
    public ModelAndView getDefinition(PortletRequest request,
             @RequestParam(value="word") String word,
             @RequestParam(value="dictId") String dict) throws Exception {

         // stuff goes here
         return new ModelAndView("jsonView", map);

    }
Example Resources

Recommended for you

Transcript: Details of description part II: Describing images in practice - T...
Transcript: Details of description part II: Describing images in practice - T...Transcript: Details of description part II: Describing images in practice - T...
Transcript: Details of description part II: Describing images in practice - T...

This presentation explores the practical application of image description techniques. Familiar guidelines will be demonstrated in practice, and descriptions will be developed “live”! If you have learned a lot about the theory of image description techniques but want to feel more confident putting them into practice, this is the presentation for you. There will be useful, actionable information for everyone, whether you are working with authors, colleagues, alone, or leveraging AI as a collaborator. Link to presentation recording and slides: https://bnctechforum.ca/sessions/details-of-description-part-ii-describing-images-in-practice/ Presented by BookNet Canada on June 25, 2024, with support from the Department of Canadian Heritage.

a11yaccessibilityalt text
Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024

This presentation explores the practical application of image description techniques. Familiar guidelines will be demonstrated in practice, and descriptions will be developed “live”! If you have learned a lot about the theory of image description techniques but want to feel more confident putting them into practice, this is the presentation for you. There will be useful, actionable information for everyone, whether you are working with authors, colleagues, alone, or leveraging AI as a collaborator. Link to presentation recording and transcript: https://bnctechforum.ca/sessions/details-of-description-part-ii-describing-images-in-practice/ Presented by BookNet Canada on June 25, 2024, with support from the Department of Canadian Heritage.

a11yaccessibilityalt text
How Social Media Hackers Help You to See Your Wife's Message.pdf
How Social Media Hackers Help You to See Your Wife's Message.pdfHow Social Media Hackers Help You to See Your Wife's Message.pdf
How Social Media Hackers Help You to See Your Wife's Message.pdf

In the modern digital era, social media platforms have become integral to our daily lives. These platforms, including Facebook, Instagram, WhatsApp, and Snapchat, offer countless ways to connect, share, and communicate.

social media hackerfacebook hackerhire a instagram hacker
Presentation Examples

• Jasig Portlet Examples
  – Calendar Portlet
  – News Reader Portlet
  – Weather Portlet
  – Widget Portlets
    • Dictionary

• uPortal Examples
  – Portlet Administration Portlet
Questions?




    Jennifer Bourey
    jbourey@unicon.net
    www.unicon.net

More Related Content

What's hot

Javatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparisonJavatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparison
Jini Lee
 
HTML5 and CSS3 refresher
HTML5 and CSS3 refresherHTML5 and CSS3 refresher
HTML5 and CSS3 refresher
Ivano Malavolta
 
HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2
James Pearce
 
Introducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and serverIntroducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and server
Spike Brehm
 
Building Cross Platform Mobile Web Apps
Building Cross Platform Mobile Web AppsBuilding Cross Platform Mobile Web Apps
Building Cross Platform Mobile Web Apps
James Pearce
 
Jsf presentation
Jsf presentationJsf presentation
Jsf presentation
Ashish Gupta
 
A Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 RevolutionA Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 Revolution
James Pearce
 
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010Hyperproductive JSF 2.0 @ JavaOne Brazil 2010
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010
Arun Gupta
 
HTML5: the new frontier of the web
HTML5: the new frontier of the webHTML5: the new frontier of the web
HTML5: the new frontier of the web
Ivano Malavolta
 
Java server faces
Java server facesJava server faces
Java server faces
Fábio Santos
 
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012 Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Atlassian
 
CQ Provisionning & Authoring
CQ Provisionning & AuthoringCQ Provisionning & Authoring
CQ Provisionning & Authoring
Gabriel Walt
 
Java Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App EngineJava Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App Engine
IMC Institute
 
Introduction to jsf 2
Introduction to jsf 2Introduction to jsf 2
Introduction to jsf 2
yousry ibrahim
 
Java Web Programming on Google Cloud Platform [2/3] : Datastore
Java Web Programming on Google Cloud Platform [2/3] : DatastoreJava Web Programming on Google Cloud Platform [2/3] : Datastore
Java Web Programming on Google Cloud Platform [2/3] : Datastore
IMC Institute
 
Java Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
Java Web Programming on Google Cloud Platform [3/3] : Google Web ToolkitJava Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
Java Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
IMC Institute
 
Rest Security with JAX-RS
Rest Security with JAX-RSRest Security with JAX-RS
Rest Security with JAX-RS
Frank Kim
 
A Complete Tour of JSF 2
A Complete Tour of JSF 2A Complete Tour of JSF 2
A Complete Tour of JSF 2
Jim Driscoll
 
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dep...
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dep...Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dep...
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dep...
Uniface
 
Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)
Fahad Golra
 

What's hot (20)

Javatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparisonJavatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparison
 
HTML5 and CSS3 refresher
HTML5 and CSS3 refresherHTML5 and CSS3 refresher
HTML5 and CSS3 refresher
 
HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2
 
Introducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and serverIntroducing Rendr: Run your Backbone.js apps on the client and server
Introducing Rendr: Run your Backbone.js apps on the client and server
 
Building Cross Platform Mobile Web Apps
Building Cross Platform Mobile Web AppsBuilding Cross Platform Mobile Web Apps
Building Cross Platform Mobile Web Apps
 
Jsf presentation
Jsf presentationJsf presentation
Jsf presentation
 
A Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 RevolutionA Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 Revolution
 
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010Hyperproductive JSF 2.0 @ JavaOne Brazil 2010
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010
 
HTML5: the new frontier of the web
HTML5: the new frontier of the webHTML5: the new frontier of the web
HTML5: the new frontier of the web
 
Java server faces
Java server facesJava server faces
Java server faces
 
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012 Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
 
CQ Provisionning & Authoring
CQ Provisionning & AuthoringCQ Provisionning & Authoring
CQ Provisionning & Authoring
 
Java Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App EngineJava Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App Engine
 
Introduction to jsf 2
Introduction to jsf 2Introduction to jsf 2
Introduction to jsf 2
 
Java Web Programming on Google Cloud Platform [2/3] : Datastore
Java Web Programming on Google Cloud Platform [2/3] : DatastoreJava Web Programming on Google Cloud Platform [2/3] : Datastore
Java Web Programming on Google Cloud Platform [2/3] : Datastore
 
Java Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
Java Web Programming on Google Cloud Platform [3/3] : Google Web ToolkitJava Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
Java Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
 
Rest Security with JAX-RS
Rest Security with JAX-RSRest Security with JAX-RS
Rest Security with JAX-RS
 
A Complete Tour of JSF 2
A Complete Tour of JSF 2A Complete Tour of JSF 2
A Complete Tour of JSF 2
 
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dep...
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dep...Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dep...
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dep...
 
Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)
 

Similar to Rich Portlet Development in uPortal

Primefaces Nextgen Lju
Primefaces Nextgen LjuPrimefaces Nextgen Lju
Primefaces Nextgen Lju
Skills Matter
 
Primefaces Nextgen Lju
Primefaces Nextgen LjuPrimefaces Nextgen Lju
Primefaces Nextgen Lju
Skills Matter
 
Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014
Ngoc Dao
 
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディングXitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
scalaconfjp
 
ASP.NET Overview - Alvin Lau
ASP.NET Overview - Alvin LauASP.NET Overview - Alvin Lau
ASP.NET Overview - Alvin Lau
Spiffy
 
Easy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMix
Easy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMixEasy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMix
Easy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMix
elliando dias
 
AnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFacesAnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFaces
Ankara JUG
 
Intro to JavaScript
Intro to JavaScriptIntro to JavaScript
Intro to JavaScript
Jussi Pohjolainen
 
RichFaces: rich:* component library
RichFaces: rich:* component libraryRichFaces: rich:* component library
RichFaces: rich:* component library
Max Katz
 
Primefaces Confess 2012
Primefaces Confess 2012Primefaces Confess 2012
Primefaces Confess 2012
cagataycivici
 
Ride on the Fast Track of Web with Ruby on Rails- Part 2
Ride on the Fast Track of Web with Ruby on Rails- Part 2Ride on the Fast Track of Web with Ruby on Rails- Part 2
Ride on the Fast Track of Web with Ruby on Rails- Part 2
A.K.M. Ahsrafuzzaman
 
Play vs Rails
Play vs RailsPlay vs Rails
Play vs Rails
Daniel Cukier
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overview
Yehuda Katz
 
Servlet 3.0
Servlet 3.0Servlet 3.0
Servlet 3.0
Minh Hoang
 
Html5 For Jjugccc2009fall
Html5 For Jjugccc2009fallHtml5 For Jjugccc2009fall
Html5 For Jjugccc2009fall
Shumpei Shiraishi
 
18CSC311J Web Design and Development UNIT-3
18CSC311J Web Design and Development UNIT-318CSC311J Web Design and Development UNIT-3
18CSC311J Web Design and Development UNIT-3
sivakumarmcs
 
RESTful Web Applications with Apache Sling
RESTful Web Applications with Apache SlingRESTful Web Applications with Apache Sling
RESTful Web Applications with Apache Sling
Bertrand Delacretaz
 
Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011
Chris Alfano
 
Bonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsBonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node js
Francois Zaninotto
 
Spine.js
Spine.jsSpine.js
Spine.js
wearefractal
 

Similar to Rich Portlet Development in uPortal (20)

Primefaces Nextgen Lju
Primefaces Nextgen LjuPrimefaces Nextgen Lju
Primefaces Nextgen Lju
 
Primefaces Nextgen Lju
Primefaces Nextgen LjuPrimefaces Nextgen Lju
Primefaces Nextgen Lju
 
Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014
 
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディングXitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
 
ASP.NET Overview - Alvin Lau
ASP.NET Overview - Alvin LauASP.NET Overview - Alvin Lau
ASP.NET Overview - Alvin Lau
 
Easy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMix
Easy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMixEasy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMix
Easy Enterprise Integration Patterns with Apache Camel, ActiveMQ and ServiceMix
 
AnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFacesAnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFaces
 
Intro to JavaScript
Intro to JavaScriptIntro to JavaScript
Intro to JavaScript
 
RichFaces: rich:* component library
RichFaces: rich:* component libraryRichFaces: rich:* component library
RichFaces: rich:* component library
 
Primefaces Confess 2012
Primefaces Confess 2012Primefaces Confess 2012
Primefaces Confess 2012
 
Ride on the Fast Track of Web with Ruby on Rails- Part 2
Ride on the Fast Track of Web with Ruby on Rails- Part 2Ride on the Fast Track of Web with Ruby on Rails- Part 2
Ride on the Fast Track of Web with Ruby on Rails- Part 2
 
Play vs Rails
Play vs RailsPlay vs Rails
Play vs Rails
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overview
 
Servlet 3.0
Servlet 3.0Servlet 3.0
Servlet 3.0
 
Html5 For Jjugccc2009fall
Html5 For Jjugccc2009fallHtml5 For Jjugccc2009fall
Html5 For Jjugccc2009fall
 
18CSC311J Web Design and Development UNIT-3
18CSC311J Web Design and Development UNIT-318CSC311J Web Design and Development UNIT-3
18CSC311J Web Design and Development UNIT-3
 
RESTful Web Applications with Apache Sling
RESTful Web Applications with Apache SlingRESTful Web Applications with Apache Sling
RESTful Web Applications with Apache Sling
 
Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011
 
Bonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsBonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node js
 
Spine.js
Spine.jsSpine.js
Spine.js
 

More from Jennifer Bourey

Migrating a 1M+ LOC project from AngularJS to Angular
Migrating a 1M+ LOC project from AngularJS to AngularMigrating a 1M+ LOC project from AngularJS to Angular
Migrating a 1M+ LOC project from AngularJS to Angular
Jennifer Bourey
 
Getting to Angular 2
Getting to Angular 2Getting to Angular 2
Getting to Angular 2
Jennifer Bourey
 
Delivering Mobile Course Content with uMobile
Delivering Mobile Course Content with uMobileDelivering Mobile Course Content with uMobile
Delivering Mobile Course Content with uMobile
Jennifer Bourey
 
uMobile: Jasig-Sakai 2012
uMobile: Jasig-Sakai 2012uMobile: Jasig-Sakai 2012
uMobile: Jasig-Sakai 2012
Jennifer Bourey
 
uMobile: Taking Mobile Applications and Devices to the Next Level
uMobile: Taking Mobile Applications and Devices to the Next LeveluMobile: Taking Mobile Applications and Devices to the Next Level
uMobile: Taking Mobile Applications and Devices to the Next Level
Jennifer Bourey
 
Sakai and uPortal 4
Sakai and uPortal 4Sakai and uPortal 4
Sakai and uPortal 4
Jennifer Bourey
 
uPortal 3.2 And Beyond
uPortal 3.2 And BeyonduPortal 3.2 And Beyond
uPortal 3.2 And Beyond
Jennifer Bourey
 

More from Jennifer Bourey (7)

Migrating a 1M+ LOC project from AngularJS to Angular
Migrating a 1M+ LOC project from AngularJS to AngularMigrating a 1M+ LOC project from AngularJS to Angular
Migrating a 1M+ LOC project from AngularJS to Angular
 
Getting to Angular 2
Getting to Angular 2Getting to Angular 2
Getting to Angular 2
 
Delivering Mobile Course Content with uMobile
Delivering Mobile Course Content with uMobileDelivering Mobile Course Content with uMobile
Delivering Mobile Course Content with uMobile
 
uMobile: Jasig-Sakai 2012
uMobile: Jasig-Sakai 2012uMobile: Jasig-Sakai 2012
uMobile: Jasig-Sakai 2012
 
uMobile: Taking Mobile Applications and Devices to the Next Level
uMobile: Taking Mobile Applications and Devices to the Next LeveluMobile: Taking Mobile Applications and Devices to the Next Level
uMobile: Taking Mobile Applications and Devices to the Next Level
 
Sakai and uPortal 4
Sakai and uPortal 4Sakai and uPortal 4
Sakai and uPortal 4
 
uPortal 3.2 And Beyond
uPortal 3.2 And BeyonduPortal 3.2 And Beyond
uPortal 3.2 And Beyond
 

Recently uploaded

論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
Toru Tamaki
 
Implementations of Fused Deposition Modeling in real world
Implementations of Fused Deposition Modeling  in real worldImplementations of Fused Deposition Modeling  in real world
Implementations of Fused Deposition Modeling in real world
Emerging Tech
 
Manual | Product | Research Presentation
Manual | Product | Research PresentationManual | Product | Research Presentation
Manual | Product | Research Presentation
welrejdoall
 
find out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challengesfind out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challenges
huseindihon
 
What's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptxWhat's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptx
Stephanie Beckett
 
Cookies program to display the information though cookie creation
Cookies program to display the information though cookie creationCookies program to display the information though cookie creation
Cookies program to display the information though cookie creation
shanthidl1
 
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly DetectionAdvanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
Bert Blevins
 
Transcript: Details of description part II: Describing images in practice - T...
Transcript: Details of description part II: Describing images in practice - T...Transcript: Details of description part II: Describing images in practice - T...
Transcript: Details of description part II: Describing images in practice - T...
BookNet Canada
 
Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024
BookNet Canada
 
How Social Media Hackers Help You to See Your Wife's Message.pdf
How Social Media Hackers Help You to See Your Wife's Message.pdfHow Social Media Hackers Help You to See Your Wife's Message.pdf
How Social Media Hackers Help You to See Your Wife's Message.pdf
HackersList
 
Quantum Communications Q&A with Gemini LLM
Quantum Communications Q&A with Gemini LLMQuantum Communications Q&A with Gemini LLM
Quantum Communications Q&A with Gemini LLM
Vijayananda Mohire
 
UiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs ConferenceUiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs Conference
UiPathCommunity
 
Recent Advancements in the NIST-JARVIS Infrastructure
Recent Advancements in the NIST-JARVIS InfrastructureRecent Advancements in the NIST-JARVIS Infrastructure
Recent Advancements in the NIST-JARVIS Infrastructure
KAMAL CHOUDHARY
 
Choose our Linux Web Hosting for a seamless and successful online presence
Choose our Linux Web Hosting for a seamless and successful online presenceChoose our Linux Web Hosting for a seamless and successful online presence
Choose our Linux Web Hosting for a seamless and successful online presence
rajancomputerfbd
 
Research Directions for Cross Reality Interfaces
Research Directions for Cross Reality InterfacesResearch Directions for Cross Reality Interfaces
Research Directions for Cross Reality Interfaces
Mark Billinghurst
 
7 Most Powerful Solar Storms in the History of Earth.pdf
7 Most Powerful Solar Storms in the History of Earth.pdf7 Most Powerful Solar Storms in the History of Earth.pdf
7 Most Powerful Solar Storms in the History of Earth.pdf
Enterprise Wired
 
Calgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptxCalgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptx
ishalveerrandhawa1
 
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALLBLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
Liveplex
 
20240702 Présentation Plateforme GenAI.pdf
20240702 Présentation Plateforme GenAI.pdf20240702 Présentation Plateforme GenAI.pdf
20240702 Présentation Plateforme GenAI.pdf
Sally Laouacheria
 
DealBook of Ukraine: 2024 edition
DealBook of Ukraine: 2024 editionDealBook of Ukraine: 2024 edition
DealBook of Ukraine: 2024 edition
Yevgen Sysoyev
 

Recently uploaded (20)

論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
 
Implementations of Fused Deposition Modeling in real world
Implementations of Fused Deposition Modeling  in real worldImplementations of Fused Deposition Modeling  in real world
Implementations of Fused Deposition Modeling in real world
 
Manual | Product | Research Presentation
Manual | Product | Research PresentationManual | Product | Research Presentation
Manual | Product | Research Presentation
 
find out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challengesfind out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challenges
 
What's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptxWhat's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptx
 
Cookies program to display the information though cookie creation
Cookies program to display the information though cookie creationCookies program to display the information though cookie creation
Cookies program to display the information though cookie creation
 
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly DetectionAdvanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
 
Transcript: Details of description part II: Describing images in practice - T...
Transcript: Details of description part II: Describing images in practice - T...Transcript: Details of description part II: Describing images in practice - T...
Transcript: Details of description part II: Describing images in practice - T...
 
Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024
 
How Social Media Hackers Help You to See Your Wife's Message.pdf
How Social Media Hackers Help You to See Your Wife's Message.pdfHow Social Media Hackers Help You to See Your Wife's Message.pdf
How Social Media Hackers Help You to See Your Wife's Message.pdf
 
Quantum Communications Q&A with Gemini LLM
Quantum Communications Q&A with Gemini LLMQuantum Communications Q&A with Gemini LLM
Quantum Communications Q&A with Gemini LLM
 
UiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs ConferenceUiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs Conference
 
Recent Advancements in the NIST-JARVIS Infrastructure
Recent Advancements in the NIST-JARVIS InfrastructureRecent Advancements in the NIST-JARVIS Infrastructure
Recent Advancements in the NIST-JARVIS Infrastructure
 
Choose our Linux Web Hosting for a seamless and successful online presence
Choose our Linux Web Hosting for a seamless and successful online presenceChoose our Linux Web Hosting for a seamless and successful online presence
Choose our Linux Web Hosting for a seamless and successful online presence
 
Research Directions for Cross Reality Interfaces
Research Directions for Cross Reality InterfacesResearch Directions for Cross Reality Interfaces
Research Directions for Cross Reality Interfaces
 
7 Most Powerful Solar Storms in the History of Earth.pdf
7 Most Powerful Solar Storms in the History of Earth.pdf7 Most Powerful Solar Storms in the History of Earth.pdf
7 Most Powerful Solar Storms in the History of Earth.pdf
 
Calgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptxCalgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptx
 
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALLBLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
 
20240702 Présentation Plateforme GenAI.pdf
20240702 Présentation Plateforme GenAI.pdf20240702 Présentation Plateforme GenAI.pdf
20240702 Présentation Plateforme GenAI.pdf
 
DealBook of Ukraine: 2024 edition
DealBook of Ukraine: 2024 editionDealBook of Ukraine: 2024 edition
DealBook of Ukraine: 2024 edition
 

Rich Portlet Development in uPortal

  • 1. Rich Portlet Development Jennifer Bourey Jasig Spring Conference, March 9, 2010 © Copyright Unicon, Inc., 2006. This work is the intellectual property of Unicon, Inc. Permission is granted for this material to be shared for non- commercial, educational purposes, provided that this copyright statement appears on the reproduced materials and notice is given that the copying is by permission of Unicon, Inc. To disseminate otherwise or to republish requires written permission from Unicon, Inc.
  • 2. Portlet Development Goals • Make – life easier – development faster – portlets shinier
  • 3. Create an Accessible 2-Column Layout
  • 5. Using the Fluid Skinning System <div class="fl-col-flex2"> <!-- start: left panel --> <div class="fl-col"> <h1>I'm the left column!</h1> </div><!-- end: left panel --> <!-- start: right panel --> <div class="fl-col"> <h1>I'm the right column!</h1> </div><!-- end: right panel --> </div>
  • 6. Accessible Two-Column Layout fl-col fl-col fl-col-flex2
  • 7. Fluid Skinning System • Layout wrappers and containers • Convenience classnames – GUI elements: Tabs, menus, icons, widgets – font family, size, and formatting • Theming • Accessibility – easy page linearization – tested for usabiltity effectiveness, specifically colorblindness – works with Assistive Technology
  • 8. Allow Users to Page Through a List
  • 10. More from Fluid Infusion • Components – Pager – Reorderers (list, grid, and image) – Uploader – Progressbar – Inline text edit • http://fluidproject.org/releases/1.1.2/demos/
  • 11. Allow Users to Select a Date
  • 13. jQuery UI Datepicker <div> <label>Start date:</label> <input class="cal-datepicker"></input> </div> <script type="text/javascript"> $(document).ready(function(){ $(".cal-datepicker").datepicker(); }); </script>
  • 14. jQuery UI Widgets • Widgets – Accordion – Datepicker – Dialog – Progressbar – Slider – Tabs • Demos: http://jqueryui.com/demos/
  • 17. jQuery UI • Effects – show, hide, toggle, color animation – add/remove/toggle/switch css class • Demos: http://jqueryui.com/demos/
  • 19. Improve UI Performance • Minify code • Minimize HTTP requests • Apply cache headers • GZip resources
  • 20. Jasig Resource Server • Server Webapp – Library of popular CSS, JS, and image resources – Provide consistent URLs – Cache, minify, and gzip hosted resources • Utilities – Filters for caching and gzipping – JSP tag for including files from resource server • Bundled with uPortal 3.1+
  • 21. Minify code: YUI Maven Plugin <plugin> <groupId>net.sf.alchim</groupId> <artifactId>yuicompressor-maven-plugin</artifactId> <version>0.7.1</version> <executions> <execution> <goals><goal>compress</goal></goals> </execution> </executions> <configuration> <excludes> <exclude>**/*.min.js</exclude> </excludes> <linebreakpos>10000</linebreakpos> <suffix>.min</suffix> <jswarn>false</jswarn> </configuration> </plugin>
  • 22. Cache Headers: Resource Server <filter> <filter-name>CacheExpiresFilter</filter-name> <filter-class> org.jasig.resourceserver.utils.filter.CacheExpirationFilter </filter-class> <!-- Length of time to set in cache headers (in seconds) --> <init-param> <param-name>cacheMaxAge</param-name> <param-value>31536000</param-value> </init-param> <!-- Time between regenerating cache header strings (in millis) --> <init-param> <param-name>regenerateHeadersInterval</param-name> <param-value>1000</param-value> </init-param> </filter> <filter-mapping> <filter-name>CacheExpiresFilter</filter-name> <url-pattern>/rs/*</url-pattern> </filter-mapping>
  • 23. GZip CSS and JS <filter> <filter-name>pageCachingFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</ filter-class> <init-param> <param-name>targetFilterLifecycle</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>pageCachingFilter</filter-name> <url-pattern>*.js</url-pattern> </filter-mapping> <filter-mapping> <filter-name>pageCachingFilter</filter-name> <url-pattern>*.css</url-pattern> </filter-mapping>
  • 24. GZip CSS and JS <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> <property name="cacheManagerName" value="ResourceServer.cacheManager" /> </bean> <bean id="pageCachingFilter" class="org.jasig.resourceserver.utils.cache.ConfigurablePageCachingFilter"> <constructor-arg ref="cacheManager"/> <constructor-arg value="SimplePageCachingFilter"/> </bean>
  • 25. GZip HTML: Tomcat <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" emptySessionPath="true" compression="on" compressableMimeType="text/html,text/xml,text/plain" />
  • 27. After
  • 28. Interact with Portlet Session and Preferences via AJAX
  • 29. AJAX Servlet Portlet Controller Browser Servlet Controller No portlet preferences access No portlet session access
  • 30. Jasig Ajax Portlet Support Portlet Browser Controller Servlet Controller
  • 32. Weather Portlet Example • Save location preferences via AJAX POST • Return success or failure
  • 33. Editing Portlet Preferences via Ajax @RequestMapping(params = {"action=delete"}) public void deleteCity( @RequestParam(value = "locationCode") String locationCode, ActionRequest request, ActionResponse response) throws Exception { Map<Object, Object> model = new HashMap<Object, Object>(); // remove location from preferences final PortletPreferences prefs = request.getPreferences(); this.weatherService.deleteWeatherLocation(prefs, locationCode); // return success model.put("status", "success"); this.ajaxPortletSupport .redirectAjaxResponse("ajax/json", model, request, response); }
  • 34. Ajax Response Controller @Controller public class AjaxResponseController { private AjaxPortletSupport ajaxPortletSupport; @Autowired public void setAjaxPortletSupport( AjaxPortletSupport ajaxPortletSupport) { this.ajaxPortletSupport = ajaxPortletSupport; } @RequestMapping("/json") public ModelAndView renderAjaxResponse(HttpServletRequest request, HttpServletResponse response) throws ServletRequestBindingException, IOException { final Map<Object, Object> model = this.ajaxPortletSupport .getAjaxModel(request, response); return new ModelAndView("jsonView", model); } }
  • 35. Proxy an AJAX Target
  • 36. Jasig Dictionary Portlet • Uses Aonaware Dictionary XML REST service • Want to make AJAX requests DictService server • Single Origin Policy prevents request – need same protocol, domain, and port
  • 37. Using Jasig’s ProxyView @RequestMapping(method = RequestMethod.GET) public ModelAndView getProxyView(HttpServletRequest request, @RequestParam(value="searchTerm") String searchTerm) { Map<String, Object> model = new HashMap<String, Object>(); // build the URL to be proxied and add it to our model String url = “http://www.proxied.com/url”; model.put(ProxyView.URL, url.toString()); // return a proxy view of the URL return new ModelAndView("proxyView", map); }
  • 40. Unescaped Javascript <script type="text/javascript"> document.write('${title}'); </script> <script type="text/javascript"> document.write('' + alert('pwnd!') + ''); </script>
  • 41. Escaped Javascript <script type="text/javascript"> document.write('<spring:escapeBody javaScriptEscape="true">${title}</spring:escapeBody>'); </script> <script type="text/javascript"> document.write('' + alert('pwnd!') + ''); </script>
  • 42. Unescaped HTML <h1> ${ title } </h1> <h1> <script type="text/javascript">alert('pwnd!');</script> </h1>
  • 43. Escaped HTML <h1> <spring:escapeBody htmlEscape="true"> ${ title } </spring:escapeBody> </h1> <h1> &lt;script type="text/javascript"&gt;alert ('pwnd!');&lt;/script&gt; </h1>
  • 44. XSS: Dictionary Portlet // parse the definition from the response in = get.getResponseBodyAsStream(); String def = service.getDefinitionFromXml(in); // escape any HTML characters return StringEscapeUtils.escapeHtml(def);
  • 45. XSS: News Reader Portlet • Display RSS feeds in a portlet • Allow HTML, but maintain security • Might need different policies for different sites
  • 46. OWASP AntiSamy • Java API for filtering HTML/CSS • Define allowed tags and attributes through XML • Clean input by stripping unwanted tags – strip malicious scripts from external content – improve presentation by removing images, etc.
  • 47. News Reader: OWASP AntiSamy // retrieve InputStream in = get.getResponseBodyAsStream(); //parse SyndFeed feed = input.build(new XmlReader(in)); //clean AntiSamy as = new AntiSamy(); List<SyndEntry> a = feed.getEntries(); for (SyndEntry entry : a) { SyndContent description = entry.getDescription(); Policy policy = Policy.getInstance(policyFile); CleanResults cr = as.scan(description.getValue(), policy); description.setValue(cr.getCleanHTML()); entry.setDescription(description); log.info("Feed " + url + " cleaned in " + cr.getScanTime() + " seconds"); }
  • 48. XSS: Calendar Portlet • Custom AntiSamy JSP tag • Wraps Spring-configured string cleaning utility <antisamy:clean value="${ event.description.value }"/>
  • 49. AntiSamy-based String Cleaning // clean a string using the configured AntiSamy file public String getCleanString(String dirtyInput) throws ScanException, PolicyException { AntiSamy as = new AntiSamy(); CleanResults cr = as.scan(dirtyInput, this.policy); return cr.getCleanHTML(); }
  • 50. AntiSamy-based JSP Tag <%@ tag isELIgnored="false" dynamic-attributes="attributes" body- content="empty" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ attribute name="value" required="true" %> <%@ tag import="org.springframework.web.context.WebApplicationContext" %> <%@ tag import="org.springframework.web.context.support.WebApplicationContextUtils" %> <%@ tag import="org.jasig.portlet.calendar.util.StringCleaningUtil" %> <% WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(application); StringCleaningUtil util = (StringCleaningUtil) ctx.getBean("stringCleaningUtil"); %> <%= util.getCleanString(value) %>
  • 51. Preventing Non-Portlet Access HttpSession session = request.getSession(false); if (session == null || !((Boolean) session.getAttribute("hasDictionarySession"))) { return new ModelAndView("jsonView", map); }
  • 52. Work with JSON and XML
  • 53. Data as XML • Javascript parsing – jQuery • Java output and parsing – Maven JAXB plugin – XStream, etc. • Groovy
  • 54. Dictionary Parsing in Groovy Groovy Implementation import java.io.InputStream import groovy.xml.StreamingMarkupBuilder import org.jasig.portlet.widget.service.IDictionaryParsingService class DictionaryParsingServiceImpl implements IDictionaryParsingService { String getDefinitionFromXml(InputStream xml) { def response = new XmlSlurper().parse(xml) return response.Definitions.Definition.WordDefinition } } Spring Wiring <lang:groovy id="dictionaryParsingService" script-source="classpath:org/jasig/portlet/widget/service/ DictionaryParsingServiceImpl.groovy"/>
  • 55. Dictionary Parsing in Groovy import java.io.InputStream import groovy.xml.StreamingMarkupBuilder import org.jasig.portlet.widget.service.IDictionaryParsingService class DictionaryParsingServiceImpl implements IDictionaryParsingService { String getDefinitionFromXml(InputStream xml) { def response = new XmlSlurper().parse(xml) return response.Definitions.Definition.WordDefinition } }
  • 56. Data as JSON • Javascript parsing – jQuery • Java output and parsing – JSONlib – net.sf.json’s JsonView
  • 57. JsonView Controller code @RequestMapping("/json") public ModelAndView renderAjaxResponse(HttpServletRequest request, HttpServletResponse response) throws ServletRequestBindingException, IOException { final Map<Object, Object> model = this.ajaxPortletSupport .getAjaxModel(request, response); return new ModelAndView("jsonView", model); } views.xml <bean id="jsonView" class="net.sf.json.spring.web.servlet.view.JsonView"> <property name="contentType" value="application/json" /> </bean> Response { response: success }
  • 59. Example: Calendar Portlet • Three views – Mobile View – Narrow Column View – MAXIMIZED View • Simple interface for view selection
  • 60. M Calendar Views Column Maximized Mobile
  • 61. Calendar View Selection public String getCalendarViewName(PortletRequest request) { String userAgent = request.getProperty("user-agent"); // check to see if this is a mobile device if (this.mobileDeviceRegexes != null && userAgent != null) { for (Pattern regex : this.mobileDeviceRegexes) { if (regex.matcher(userAgent).matches()) { return CALENDAR_MOBILE_VIEW; } } } // otherwise check the portlet window state WindowState state = request.getWindowState(); if (WindowState.MAXIMIZED.equals(state)) { return CALENDAR_WIDE_VIEW; } else { return CALENDAR_NARROW_VIEW; } }
  • 65. Interesting Web APIs • Google APIs – http://code.google.com/more/ • Yahoo APIs – http://developer.yahoo.com/everything.html#apis • Programmable Web – http://www.programmableweb.com/apis • Many Popular Sites – Twitter, YouTube, Last.fm
  • 66. Personal Favorites • Google Visualizations • Google Maps • Yahoo Stock Data • Yahoo Weather • Twitter
  • 68. Spring 3.0 • Portlet 2.0 (JSR-286) – Resource URLs: @ResourceMapping • Spring 3.0 – REST template – JSR-286 support
  • 69. Ajax in JSR-168 and Spring 2.5 JSP/Javascript $.get('<c:url value="/ajax/dictionary"/>', {}, function(){}, "json"); Servlet Controller @RequestMapping(method = RequestMethod.GET) public ModelAndView getDefinition(HttpServletRequest request, @RequestParam(value="word") String word, @RequestParam(value="dictId") String dict) throws Exception { // stuff goes here return new ModelAndView("jsonView", map); }
  • 70. Ajax with Jasig Library JSP/Javascript $.get('${dictionaryUrl}', {}, function(){}, "json"); Portlet Controller @RequestMapping(params = {"action=delete"}) public ModelAndView getDefinition(ActionRequest request, ActionResponse response, @RequestParam(value="word") String word, @RequestParam(value="dictId") String dict) throws Exception { // stuff goes here this.ajaxPortletSupport .redirectAjaxResponse("ajax/json", model, request, response); }
  • 71. Ajax in JSR-286 and Spring 3.0 JSP/Javascript $.get('<portlet:resourceURL/>', {}, function(){}, "json"); Portlet Controller @ResourceMapping() public ModelAndView getDefinition(PortletRequest request, @RequestParam(value="word") String word, @RequestParam(value="dictId") String dict) throws Exception { // stuff goes here return new ModelAndView("jsonView", map); }
  • 73. Presentation Examples • Jasig Portlet Examples – Calendar Portlet – News Reader Portlet – Weather Portlet – Widget Portlets • Dictionary • uPortal Examples – Portlet Administration Portlet
  • 74. Questions? Jennifer Bourey jbourey@unicon.net www.unicon.net