/o//commerce-media/accounts/-1/images/18474630?download=true
The Vaadin 7 Control Panel centralizes management of the shared Vaadin 7 environment.
The Vaadin 7 Control Panel features:
* Overview page summarizes all details of the shared Vaadin environment including the version of Vaadin, the add ons included in the widgetset compile and the date/time when the widget set was compiled.
* An "About Vaadin" page defines common Vaadin terminology to help those new to the Vaadin ecosystem.
* Easy upgrade to a new version of Vaadin (including the 7.3 line), even when server is blocked from general internet access (via manual upload).
* During the upgrade, all Vaadin portlets are updated (if setting is used) to the same version of Vaadin being deployed. This will allow for a Vaadin upgrade but not redeploy all Vaadin portlets to benefit from the upgrade.
* Easy upload and integration of Vaadin Add-Ons (no more EXT plugin deployment or manual jar dropping).
* Create and edit custom Vaadin themes in the control panel, including import and export capability. This allows for a theme to be created in one environment and migrated to other environments (such as code promotion from dev->test->qa->prod or deploying to all nodes in a cluster).
* Settings to control how the control panel works, including settings to increase memory allocation for compiling widget sets and themes (necessary when there are a lot of add ons included in the widget set builds).
* Detailed output for the upgrade process, the theme compilation process, and the widget set compilation process.
* When deployed, if Vaadin 6 is present in Liferay it will be purged and replaced with Vaadin 7.2.7 from the control panel.
* The Vaadin 7 Control Panel supports I18N, although currently the only supplied language bundle is English (please contact support@vaadinonliferay.com to submit a language bundle).
There is a service tier provided by vaadin7-control-panel-portlet-service-1.0.0.0.jar. This service tier allows Vaadin 7 portlets the ability to check the installed version of Vaadin 7, determine if the Valo theme is available, list all installed add ons and themes, etc.
Additionally Vaadin 7 plugins can take advantage of the service tier to support hot deploy of Vaadin add ons and themes. This will allow, for example, MarketPlace Vaadin 7 plugins that ship with necessary dependent add ons and/or themes, will allow a Vaadin 7 plugin deployment to the nodes of a cluster with all dependent add ons/themes without having to manually deploy via the control panel, and it will allow for Vaadin 7 plugin promotion (dev->test->qa->prod) to include dependent add ons/themes without requiring manual deployments before hand.
NOTE:
When deployed, the Vaadin 7 Control Panel will purge Vaadin 6 from Liferay if it is still there (because Vaadin 6 and Vaadin 7 cannot coexist in the shared environment), but sometimes this can cause problems for the application container. You should restart the Liferay environment after deploying the Vaadin 7 Control Panel.
For "." left-hand operand: Expected a hash, but this has evaluated to a string (wrapper: f.t.SimpleScalar): ==> specifications [in template "3192443#3192485#null" at line 16, column 36] ---- FTL stack trace ("~" means nesting-related): - Failed at: #if specifications?has_content && spe... [in template "3192443#3192485#null" at line 16, column 1] ----
1<#assign
2 channels = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels")
3 channelId = ""
4/>
5
6<#list channels.items as channel>
7 <#if channel.name == "Marketplace Channel">
8 <#assign channelId = channel.id />
9 </#if>
10</#list>
11
12<#if (CPDefinition_cProductId.getData())??>
13 <#assign specifications = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/" + channelId + "/products/" + CPDefinition_cProductId.getData() + "/product-specifications") />
14</#if>
15
16<#if specifications?has_content && specifications.items?has_content>
17 <#list specifications.items as specification>
18 <#if specification.specificationKey?has_content && specification.specificationKey == "developer-name">
19 ${specification.value}
20 </#if>
21 </#list>
22</#if>
The string doesn't match the expected date/time/date-time format. The string to parse was: "16-7-28 上午12:00". The expected format was: "MM/dd/yy HH:mm". The nested reason given follows: Unparseable date: "16-7-28 上午12:00" ---- FTL stack trace ("~" means nesting-related): - Failed at: ${CPDefinition_displayDate.getData()?... [in template "3192443#3192485#null" at line 4, column 9] ----
1<#setting date_format="MMMMM d, yyyy">
2
3<#if (CPDefinition_displayDate.getData())??>
4 ${CPDefinition_displayDate.getData()?datetime("MM/dd/yy HH:mm")?date}
5</#if>
For "." left-hand operand: Expected a hash, but this has evaluated to a string (wrapper: f.t.SimpleScalar): ==> specifications [in template "3192443#3192485#null" at line 17, column 36] ---- FTL stack trace ("~" means nesting-related): - Failed at: #if specifications?has_content && spe... [in template "3192443#3192485#null" at line 17, column 1] ----
1<#assign
2 channelId=""
3 channels=restClient.get("/headless-commerce-delivery-catalog/v1.0/channels")
4 filteredSpecifications=[]
5/>
6
7<#list channels.items as channel>
8 <#if channel.name=="Marketplace Channel">
9 <#assign channelId = channel.id />
10 </#if>
11</#list>
12
13<#if (CPDefinition_cProductId.getData())??>
14 <#assign specifications = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/" + channelId + "/products/" + CPDefinition_cProductId.getData() + "/product-specifications") />
15</#if>
16
17<#if specifications?has_content && specifications.items?has_content>
18
19 <#assign
20 cpuQuantity = ""
21 memoryQuantity = ""
22 />
23
24 <#list specifications.items?sort_by("specificationKey") as specification>
25 <#if stringUtil.equals(specification.value, "cloud")>
26 <script>
27 var resourceRequirements = document.querySelector(".marketplace-resource-requirements")
28
29 resourceRequirements.classList.remove("d-none");
30 </script>
31 </#if>
32
33 <#if specification.specificationKey?has_content && (stringUtil.equals(specification.specificationKey, "cpu") || stringUtil.equals(specification.specificationKey, "ram"))>
34 <#if stringUtil.equals(specification.specificationKey, "cpu" )>
35 <#assign cpuQuantity = specification.value />
36
37 <#if cpuQuantity?has_content>
38 ${cpuQuantity}
39 <#if cpuQuantity?eval gt 1>
40 CPUS
41 </#if>
42 <#if cpuQuantity?eval lt 2>
43 CPU
44 </#if>
45 </#if>
46 </#if>
47
48 <#if stringUtil.equals(specification.specificationKey, "ram")>
49 <#assign memoryQuantity = specification.value />
50
51 <#if cpuQuantity?has_content && memoryQuantity?has_content >,</#if>
52 </#if>
53
54 <#if stringUtil.equals(specification.specificationKey, "ram")>
55 <#assign memoryQuantity = specification.value />
56
57 <#if memoryQuantity?has_content>
58 ${memoryQuantity} GB RAM
59 </#if>
60 </#if>
61 </#if>
62 </#list>
63</#if>
For "." left-hand operand: Expected a hash, but this has evaluated to a string (wrapper: f.t.SimpleScalar): ==> specifications [in template "3192443#3192485#null" at line 16, column 36] ---- FTL stack trace ("~" means nesting-related): - Failed at: #if specifications?has_content && spe... [in template "3192443#3192485#null" at line 16, column 1] ----
1<#assign
2 channelId=""
3 channels=restClient.get("/headless-commerce-delivery-catalog/v1.0/channels")
4 filteredSpecifications=[] />
5
6<#list channels.items as channel>
7 <#if channel.name=="Marketplace Channel">
8 <#assign channelId = channel.id />
9 </#if>
10</#list>
11
12<#if (CPDefinition_cProductId.getData())??>
13 <#assign specifications = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/" + channelId + "/products/" + CPDefinition_cProductId.getData() + "/product-specifications") />
14</#if>
15
16<#if specifications?has_content && specifications.items?has_content>
17 <#list specifications.items?sort_by("specificationKey") as specification>
18 <#if specification.specificationKey?has_content>
19 <#if stringUtil.equals(specification.specificationKey, "price-model" )>
20 <#assign priceModel = specification.value />
21 <#if priceModel?has_content>
22 ${priceModel}
23 </#if>
24 </#if>
25 </#if>
26 </#list>
27</#if>
HTML Example
A paragraph is a self-contained unit of a discourse in writing dealing with a particular point or idea. Paragraphs are usually an expected part of formal writing, used to organize longer prose.