[JBoss Seam] - conversations, propagations etc ... - need explanation
by amashtakov
Hi,
I've started to experiment a bit with seam conversations in order
to develop some sort of global strategy and patterns, which I'm going to
use in my application.
I developed a simple app with 2 pages:
page1.xhtml
| <s:link value="start" action="#{conversation.begin}"/>
|
page2.xhtml simply displays #{conversationList} in h:dataTable
and includes
| ...
| <s:link value="start again" propagation="begin"/>
|
I performed several tests and noticed the following:
1. With no code modifications:
Step 1: clicking on "start" on page1.xhtml starts new conversation
Step 2: clicking on "start again" on page2.xhml creates new
conversation too.
Actually, I expected "java.lang.IllegalStateException: begin() called from
long-running conversation, try join=true" on step 2, according with
the documentation.
2. Changes in page2.xhtml:
| ...
| <s:link value="start again" propagation="join"/>
|
Step 1: clicking on "start" on page1.xhtml starts new conversation
Step 2: clicking on "start again" on page2.xhml joins current
conversation
Can anyone explain why this happens ? From my point of view
step#2 in test#1 has to generate exception.
I'll appreciate a good explanation of seam algorithm/steps, which is/are
used in order to determine whether the long running conversation is
active or not.
Thank you in advance,
/Alexander
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4095905#4095905
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4095905
18Â years, 9Â months
[JBoss Seam] - Re: SeamTest and expectedExceptions
by matt.drees
So I think I can say I understand what Seam does now. I don't necessarily agree with it, though. I do understand that the installed attribute can't just simply override the annotation on that class, otherwise something like
| <core:jbpm/>
| wouldn't work, because "installed" would still be false.
On a related note, I did a little testing to see if I was reading the source code right. The results are a little odd, I think:
| <?xml version="1.0" encoding="UTF-8"?>
| <components xmlns="http://jboss.com/products/seam/components"
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
| xsi:schemaLocation="http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.0.xsd">
|
| <!-- A standard @Name-annotated component: -->
| <component name="foo" scope="session" startup="true"> <!-- scope etc attributes ignored... -->
| <property name="title">A Foo</property> <!-- ...but property configurations are not... -->
| </component>
| <component name="foo" installed="false">
| <property name="description">installed by default</property> <!-- ...even when installed="false" -->
| </component>
|
| <!-- Not @Name-annotated: -->
| <component name="bar" class="eg.AbstractExampleComponent$Bar" scope="session" startup="true"> <!-- scope etc attributes not ignored -->
| <property name="title">A Bar</property> <!-- properties not ignored, either, of course -->
| </component>
| <component name="bar">
| <property name="description">not annotated as a component</property> <!-- (ever) -->
| </component>
|
| <!-- @Name-annotated, but also @Install(false): -->
| <component class="eg.AbstractExampleComponent$Baz" scope="session" startup="true"> <!-- scope etc attributes not ignored -->
| <property name="title">A Baz</property>
| <property name="description">a non-installed component</property>
| </component>
|
| </components>
|
| package eg;
|
| import org.jboss.seam.ScopeType;
| import org.jboss.seam.annotations.Install;
| import org.jboss.seam.annotations.Name;
| import org.jboss.seam.annotations.Scope;
|
|
| public class AbstractExampleComponent {
|
| private String description;
| private String title;
|
| public String getDescription() {
| return description;
| }
| public void setDescription(String name) {
| this.description = name;
| }
| public String getTitle() {
| return title;
| }
| public void setTitle(String title) {
| this.title = title;
| }
|
| @Name("foo")
| @Scope(ScopeType.CONVERSATION)
| public static class Foo extends AbstractExampleComponent {}
|
| @Scope(ScopeType.CONVERSATION)
| public static class Bar extends AbstractExampleComponent {}
|
| @Name("baz")
| @Install(false)
| @Scope(ScopeType.CONVERSATION)
| public static class Baz extends AbstractExampleComponent {}
|
| }
|
| package eg;
|
| import org.jboss.seam.Component;
| import org.jboss.seam.ScopeType;
| import org.jboss.seam.Seam;
| import org.jboss.seam.mock.SeamTest;
| import org.testng.annotations.Test;
|
| import eg.AbstractExampleComponent.Bar;
| import eg.AbstractExampleComponent.Baz;
| import eg.AbstractExampleComponent.Foo;
|
| public class InitializationTest extends SeamTest{
|
| @Override
| protected void startJbossEmbeddedIfNecessary() throws Exception {
| }
|
| @Test
| public void foo() throws Exception {
| new ComponentTest() {
|
| @Override
| protected void testComponents() throws Exception {
| Foo foo = (Foo) Component.getInstance("foo");
| assert foo.getTitle().equals("A Foo");
| assert foo.getDescription().equals("installed by default");
| Component component = Seam.componentForName("foo");
| assert component.getScope() == ScopeType.CONVERSATION; //xml override not used
| assert component.isStartup() == false; //same
| }
|
| }.run();
| }
|
| @Test
| public void bar() throws Exception {
| new ComponentTest() {
|
| @Override
| protected void testComponents() throws Exception {
| Bar bar = (Bar) Component.getInstance("bar");
| assert bar.getTitle().equals("A Bar");
| assert bar.getDescription().equals("not annotated as a component");
| Component component = Seam.componentForName("bar");
| assert component.getScope() == ScopeType.SESSION;
| assert component.isStartup() == true;
| }
|
| }.run();
| }
| @Test
| public void baz() throws Exception {
| new ComponentTest() {
|
| @Override
| protected void testComponents() throws Exception {
| Baz baz = (Baz) Component.getInstance("baz");
| assert baz.getTitle().equals("A Baz");
| assert baz.getDescription().equals("a non-installed component");
| Component component = Seam.componentForName("baz");
| assert component.getScope() == ScopeType.SESSION;
| assert component.isStartup() == true;
| }
|
| }.run();
| }
|
| }
|
(The test passes)
The biggest oddity to me is that for installed components, you can't override *any* annotations, not just "@Install". Another oddity is that for install="false" elements, properties are still picked up and used.
It smells buggy. Or at least not-thought-through.
Is this the way things are supposed to be?
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4095900#4095900
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4095900
18Â years, 9Â months
[JBossWS] - Re: Web seervice with authentication and wsconsume
by Christy
anonymous wrote : Yes, you need to also specify the authMethod and transportGuarantee. You can also take a look at the samples, in particular the jaxws-samples-context features this
I'm sorry, I'm here again. I still have the same problem, WSDL pritected with password.
Please look at my code once again:
Web service code:
@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
@WebContext(authMethod = "BASIC", transportGuarantee="NONE", secureWSDLAccess = false)
@SecurityDomain("e2edmwsSecurity")
@Stateless
public class e2edm_metadata_ws implements e2edmnwsInterface{
}
web.xml file:
<servlet-name>e2edm_metadata_ws</servlet-name>
<servlet-class>metadata.e2edm.e2edm_metadata_ws</servlet-class>
<servlet-mapping>
<servlet-name>e2edm_metadata_ws</servlet-name>
<url-pattern>/e2edmws</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>e2edm_metadata_ws_security</web-resource-name>
<url-pattern>/</url-pattern>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>ws</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>e2edmwsSecurity</realm-name>
</login-config>
<security-role>
<role-name>ws</role-name>
</security-role>
jbossweb.xml:
<jboss-web>
<security-domain>java:/jaas/e2edmwsSecurity</security-domain>
</jboss-web>
Why I still have WSDL with password? Thank you!!
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4095895#4095895
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4095895
18Â years, 9Â months
[JBoss Seam] - the method invoked twice, when render the page once!
by chlol
in my page ,only one place to inove the method,but it excuted twice,when render the page once
i search the solution in jboss forum and google,but i cann't solve it.
the code piece:
| <s:decorate template="layout/display.xhtml">
| <ui:define name="label">#{messages['task.principal']}</ui:define>
| <h:selectOneMenu id="userByPrincipalId" value="#{taskList.task.userByPrincipal.id}">
| <f:selectItem itemValue="-1" itemLabel="#{messages['label.selectItem.message']}"/>
| <f:selectItems value="#{userList.selectItem}"/>
| </h:selectOneMenu>
| </s:decorate>
|
when the page render,the method getSelectItem in UserList invoked twice
my page
| <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
| <ui:composition xmlns="http://www.w3.org/1999/xhtml"
| xmlns:s="http://jboss.com/products/seam/taglib"
| xmlns:ui="http://java.sun.com/jsf/facelets"
| xmlns:f="http://java.sun.com/jsf/core"
| xmlns:h="http://java.sun.com/jsf/html"
| xmlns:a="https://ajax4jsf.dev.java.net/ajax"
| xmlns:rich="http://richfaces.ajax4jsf.org/rich"
| template="layout/template.xhtml">
|
| <ui:define name="body">
|
| <h:messages globalOnly="true" styleClass="message" id="globalMessages" />
|
| <h:form id="taskSearch" styleClass="edit">
|
| <rich:simpleTogglePanel
| label="#{messages['subproject']} / #{messages['task']} #{messages['label.searchCondition.title']}"
| switchType="ajax">
| <h:panelGrid columns="4" columnClass="gridContent" width="80%" algin="left">
| <s:decorate template="layout/display.xhtml">
| <ui:define name="label">#{messages['task.name']}</ui:define>
| <h:inputText id="name" value="#{taskList.task.name}"/>
| </s:decorate>
| <s:decorate template="layout/display.xhtml">
| <ui:define name="label">#{messages['task.belongProject']}</ui:define>
| <h:selectOneMenu id="projectId" value="#{taskList.task.project.id}">
| <f:selectItem itemValue="-1" itemLabel="#{messages['label.selectItem.message']}"/>
| <f:selectItems value="#{projectList.selectItemByOrdinary}"/>
| </h:selectOneMenu>
| </s:decorate>
|
|
| </h:panelGrid>
|
| <h:panelGrid columns="4" columnClass="gridContent" width="80%" algin="left">
|
| <s:decorate template="layout/display.xhtml">
| <ui:define name="label">#{messages['task.creator']}</ui:define>
| <h:selectOneMenu id="userByCreatorId" value="#{taskList.task.userByCreator.id}">
| <f:selectItem itemValue="-1" itemLabel="#{messages['label.selectItem.message']}"/>
| <f:selectItems value="#{userList.selectItem}"/>
| </h:selectOneMenu>
| </s:decorate>
|
| <s:decorate template="layout/display.xhtml">
| <ui:define name="label">#{messages['task.principal']}</ui:define>
| <h:selectOneMenu id="userByPrincipalId" value="#{taskList.task.userByPrincipal.id}">
| <f:selectItem itemValue="-1" itemLabel="#{messages['label.selectItem.message']}"/>
| <f:selectItems value="#{userList.selectItem}"/>
| </h:selectOneMenu>
| </s:decorate>
| </h:panelGrid>
|
|
| <h:panelGrid columns="4" columnClass="gridContent" width="80%" algin="left">
|
| <s:decorate template="layout/display.xhtml">
| <ui:define name="label">#{messages['task.type']}</ui:define>
| <h:selectOneMenu id="type" value="#{taskList.task.leafFlag}">
| <f:selectItem itemValue="-1" itemLabel="#{messages['label.selectItem.message']}"/>
| <f:selectItem itemValue="1" itemLabel="#{messages['subproject']}"/>
| <f:selectItem itemValue="0" itemLabel="#{messages['task']}"/>
| </h:selectOneMenu>
| </s:decorate>
|
| <s:decorate template="layout/display.xhtml">
| <ui:define name="label">#{messages['task.state']}</ui:define>
| <h:selectOneMenu id="state" value="#{taskList.task.state}">
| <f:selectItem itemValue="-1" itemLabel="#{messages['label.selectItem.message']}"/>
| <f:selectItems value="#{constants.taskState}"/>
| </h:selectOneMenu>
| </s:decorate>
| </h:panelGrid>
|
| </rich:simpleTogglePanel>
|
| <div class="actionButtons">
| <table>
| <tr>
| <td align="left">
| <h:commandButton action="/TaskList.xhtml?filter=default&proId=-2&parentId=-2"
| id="search" value="#{messages['button.search']}" />
|
| <h:commandButton
| action="/TaskList.xhtml?filter=principalisme&proId=-2&parentId=-2"
| id="principalisme"
| value="#{messages['task.principalisme']}" >
| <s:conversationPropagation type="join"/>
| </h:commandButton>
|
| <h:commandButton
| action="/TaskList.xhtml?filter=creatorisme&proId=-2&parentId=-2"
| id="creatorisme"
| value="#{messages['task.creatorisme']}" />
| <h:commandButton action="/TaskList.xhtml?filter=timeover&proId=-2&parentId=-2"
| id="timeover"
| value="#{messages['task.timeover']}"/>
| </td>
|
| <td align="right">
| <s:button view="/TaskEdit.xhtml" id="createSubproject"
| value="#{messages['button.create']}#{messages['task.onelevelsubproject']}" rendered="#{projectList.isPrincipal()}">
| <f:param name="tskId" value="0"/>
| <f:param name="taskId" />
| <f:param name="tType" value="1" />
| <s:conversationPropagation propagation="begin" />
| </s:button>
|
| <s:button view="/TaskEdit.xhtml" id="createTask"
| value="#{messages['button.create']}#{messages['task.oneleveltask']}" rendered="#{projectList.isPrincipal()}">
| <f:param name="tskId" value="0"/>
| <f:param name="taskId" />
| <f:param name="tType" value="0" />
| <s:conversationPropagation propagation="begin" />
| </s:button>
| </td>
| </tr>
| </table>
|
|
| </div>
|
|
|
|
|
| <rich:panel style="padding:0" headerClass="outpanelHeader">
|
| <h:panelGrid columns="2" columnClasses="gridContent">
| <rich:panel bodyClass="inpanelBody">
| <f:facet name="header">
| #{messages['label.tree']}
| </f:facet>
|
| <div class="sample-container">
| <rich:tree style="overflow:auto;width:288px;height:300px;" value="#{treeHome.data}" var="item" switchType="client" nodeFace="#{item.type}">
| <rich:treeNode type="library">
| <h:outputText value="#{item.type}" />
| </rich:treeNode>
| <rich:treeNode type="project">
|
| <h:outputText value="#{item.name}" />
| <a:support event="onselected" reRender="resultTable">
| <a:actionparam name="parentId" value="-1" assignTo="#{taskList.parentId}"/>
| <a:actionparam name="proId" value="#{item.id}" assignTo="#{taskList.projectId}"/>
| <a:actionparam name="order" value="beginDate asc" assignTo="#{taskList.order}"/>
| </a:support>
|
| </rich:treeNode>
| <rich:treeNode type="subproject">
| <h:outputText value="#{item.name}" />
| <a:support event="onselected" reRender="resultTable">
| <a:actionparam name="proId" value="-1" assignTo="#{taskList.projectId}"/>
| <a:actionparam name="parentId" value="#{item.id}" assignTo="#{taskList.parentId}"/>
| <a:actionparam name="order" value="beginDate asc" assignTo="#{taskList.order}"/>
| </a:support>
| </rich:treeNode>
| <rich:treeNode type="task">
| <h:outputText value="#{item.name}" />
| <a:support event="onselected" reRender="resultTable">
| <a:actionparam name="proId" value="-1" assignTo="#{taskList.projectId}"/>
| <a:actionparam name="parentId" value="#{item.id}" assignTo="#{taskList.parentId}"/>
| <a:actionparam name="order" value="beginDate asc" assignTo="#{taskList.order}"/>
| </a:support>
| </rich:treeNode>
| </rich:tree></div>
| </rich:panel>
|
| <a:outputPanel id="resultTable">
| <rich:panel bodyClass="inpanelBody" style="overflow:auto;width:600px;height:385px;">
| <f:facet name="header">#{messages['subproject']} / #{messages['task']} #{messages['label.searchResult.title']}</f:facet>
| <div class="results" id="taskList"><h:outputText
| value="#{messages['label.searchResult.null']}"
| rendered="#{empty taskList.resultList}" />
|
|
| <!-- <h:outputText value="#{taskList.parentId}" id="test"/>-->
|
|
|
|
|
| <rich:datascroller for="taskList" rendered="#{taskList.resultList.size > 10}"/>
|
| <rich:dataTable
| id="taskList" var="task" value="#{taskList.resultList}"
| rendered="#{not empty taskList.resultList}"
| rowClasses="row1,row2"
| rows="10">
| <h:column>
| <f:facet name="header">
| <s:link styleClass="columnHeader"
| value="#{messages['task.name']} #{taskList.order=='name asc' ? messages.down : ( taskList.order=='name desc' ? messages.up : '' )}">
| <f:param name="order"
| value="#{taskList.order=='name asc' ? 'name desc' : 'name asc'}" />
| </s:link>
| </f:facet>
|
|
|
| <!-- <div onclick="event.cancelBubble = true;" class="popup" id="#{task.id}" style="z-index:1000">-->
| <rich:toolTip followMouse="true" direction="top-right" delay="500" mode="client">
| <table>
| <tr>
| <td style="white-space:nowrap">#{messages['task.code']}:</td>
| <td style="white-space:nowrap">#{task.code}</td>
| </tr>
| <tr>
| <td style="white-space:nowrap">#{messages['task.type']}:</td>
| <td style="white-space:nowrap">#{task.wrappedType}</td>
| </tr>
| <tr>
| <td style="white-space:nowrap">#{messages['task.spendHour']}:</td>
| <td style="white-space:nowrap">#{task.spendHour}</td>
| </tr>
| <tr>
| <td style="white-space:nowrap">#{messages['task.createDate']}:</td>
| <td style="white-space:nowrap">
| <h:outputText value="#{task.createDate}">
| <s:convertDateTime type="both" dateStyle="long" pattern="yyyy-MM-dd"/>
| </h:outputText>
| </td>
| </tr>
| <tr>
| <td style="white-space:nowrap">#{messages['task.description']}:</td>
| <td style="white-space:nowrap">
| <h:outputText escape="false" value="#{task.wrappedDescription}"/>
| </td>
| </tr>
| <tr>
| <td colspan="2" align="left">
| <rich:separator height="1" style="padding:10px 0" />
| </td>
| </tr>
|
| <tr>
| <td style="white-space:nowrap">#{messages['task.belongProject']}:</td>
| <td style="white-space:nowrap">#{task.project.name}</td>
| </tr>
| <tr>
| <td style="white-space:nowrap">#{messages['project.creator']}:</td>
| <td style="white-space:nowrap">
| <h:outputText value="#{task.project.userByCreator.name}"/>
| </td>
| </tr>
| <tr>
| <td style="white-space:nowrap">#{messages['project.principal']}:</td>
| <td style="white-space:nowrap">
| <h:outputText value="#{task.project.userByPrincipal.name}"/>
| </td>
| </tr>
|
| </table>
| </rich:toolTip>
|
|
|
| <s:link view="/TaskEdit.xhtml"
| value="#{task.name}" id="task">
| <f:param name="taskId" value="#{task.id}" />
| <f:param name="projectId" value="#{task.project.id}" />
| <f:param name="proId" value="#{task.project.id}" />
| <f:param name="parentId" value="#{task.parentId}" />
| <f:param name="tskId" value="#{task.parentId}" />
| <f:param name="tType" value="#{task.leafFlag}" />
| </s:link>
|
| <h:outputText value="#{messages['notLeaf']}" rendered="#{task.leafFlag == 1}"/>
|
| </h:column>
|
| <h:column>
| <f:facet name="header">
| <s:link styleClass="columnHeader"
| value="#{messages['task.principal']} #{taskList.order=='principal asc' ? messages.down : ( taskList.order=='principal desc' ? messages.up : '' )}">
| <f:param name="order"
| value="#{taskList.order=='principal asc' ? 'principal desc' : 'principal asc'}" />
| </s:link>
| </f:facet>
| #{task.userByPrincipal.name}
| </h:column>
| <h:column>
| <f:facet name="header">
| <s:link styleClass="columnHeader"
| value="#{messages['task.creator']} #{taskList.order=='creator asc' ? messages.down : ( taskList.order=='creator desc' ? messages.up : '' )}">
| <f:param name="order"
| value="#{taskList.order=='creator asc' ? 'creator desc' : 'creator asc'}" />
| </s:link>
| </f:facet>
| #{task.userByCreator.name}
| </h:column>
| <h:column>
| <f:facet name="header">
| <s:link styleClass="columnHeader"
| value="#{messages['task.beginDate']} #{taskList.order=='beginDate asc' ? messages.down : ( taskList.order=='beginDate desc' ? messages.up : '' )}">
| <f:param name="order"
| value="#{taskList.order=='beginDate asc' ? 'beginDate desc' : 'beginDate asc'}" />
| </s:link>
| </f:facet>
| <h:outputText value="#{task.beginDate}">
| <s:convertDateTime type="both" dateStyle="long"
| pattern="yyyy-MM-dd" />
| </h:outputText>
|
| </h:column>
| <h:column>
| <f:facet name="header">
| <s:link styleClass="columnHeader"
| value="#{messages['task.endDate']} #{taskList.order=='endDate asc' ? messages.down : ( taskList.order=='endDate desc' ? messages.up : '' )}">
| <f:param name="order"
| value="#{taskList.order=='endDate asc' ? 'endDate desc' : 'endDate asc'}" />
| </s:link>
| </f:facet>
| <h:outputText value="#{task.endDate}">
| <s:convertDateTime type="both" dateStyle="long"
| pattern="yyyy-MM-dd" />
| </h:outputText>
|
| </h:column>
| <h:column>
| <f:facet name="header">
| <s:link styleClass="columnHeader"
| value="#{messages['task.state']} #{taskList.order=='state asc' ? messages.down : ( taskList.order=='state desc' ? messages.up : '' )}">
| <f:param name="order"
| value="#{taskList.order=='state asc' ? 'state desc' : 'state asc'}" />
| </s:link>
| </f:facet>
| #{task.wrappedState}
| </h:column>
|
| <h:column>
| <f:facet name="header">#{messages['label.header.operation']}</f:facet>
|
| <div onclick="event.cancelBubble = true;" class="popup" id="#{task.id}#{task.code}" style="z-index:1000">
| <table>
| <tr>
| <td colspan="2" align="right"><a onclick="hideCurrentPopup();return false;"><img src="img/close.png"/></a></td>
| </tr>
| <tr>
| <td colspan="2" style="white-space:nowrap">[#{task.name}]</td>
| </tr>
| <tr>
| <td colspan="2" style="white-space:nowrap">#{messages['task.operation.selectOperation']}</td>
| </tr>
| <tr>
| <td style="white-space:nowrap">
| <!-- create subproject -->
| <s:link view="/TaskEdit.xhtml"
| value="#{messages['right']}#{messages['task.operation.createSubproject']}"
| rendered="#{authenticator.user.id == task.userByPrincipal.id and task.leafFlag == 1 and task.state == 0}">
| <f:param name="proId" value="#{task.project.id}"/>
| <f:param name="tskId" value="#{task.id}"/>
| <f:param name="taskId" />
| <f:param name="tType" value="1" />
| <s:conversationPropagation propagation="begin" />
| </s:link>
| </td>
| <td style="white-space:nowrap">
| <!-- create task -->
| <s:link view="/TaskEdit.xhtml"
| value="#{messages['right']}#{messages['task.operation.createTask']}"
| rendered="#{authenticator.user.id == task.userByPrincipal.id and task.leafFlag == 1 and task.state == 0}">
| <f:param name="proId" value="#{task.project.id}"/>
| <f:param name="tskId" value="#{task.id}"/>
| <f:param name="taskId" />
| <f:param name="tType" value="0" />
| <s:conversationPropagation propagation="begin" />
| </s:link>
| </td>
| </tr>
| </table>
| </div>
| <s:link onmouseover="showPopup('#{task.id}#{task.code}', event, 'left');"
| value="#{messages['button.create']}#{messages['haveChildren']}"
| rendered="#{authenticator.user.id == task.userByPrincipal.id and task.leafFlag == 1 and task.state == 0}">
| <f:param name="taskId" value="#{task.id}" />
| </s:link>
|
| <span>Â Â Â Â Â Â </span>
|
|
|
| <div onclick="event.cancelBubble = true;" class="popup" id="#{task.code}#{task.id}" style="z-index:1000">
| <table>
| <tr>
| <td colspan="2" align="right"><a onclick="hideCurrentPopup();return false;"><img src="img/close.png"/></a></td>
| </tr>
| <tr>
| <td colspan="2" style="white-space:nowrap">[#{task.name}]</td>
| </tr>
| <tr>
| <td colspan="2" style="white-space:nowrap">
| <h:outputText value="#{messages['task.warning.content']}" escape="false"/>
| </td>
| </tr>
| <tr>
| <td>
| <!-- close the task -->
| <s:link view="/TaskList.xhtml"
| value="#{messages['right']}#{messages['task.close']}"
| action="#{taskHome.update}"
| id="closetask"
| rendered="#{authenticator.user.id == task.userByCreator.id and task.state == 0}">
| <f:param name="id" value="#{task.id}" />
| <f:param name="tState" value="1"/>
| </s:link>
| </td>
| <td>
| <!-- cancel the task -->
| <s:link view="/TaskList.xhtml"
| action="#{taskHome.update}"
| value="#{messages['right']}#{messages['task.cancel']}"
| id="canceltask"
| rendered="#{authenticator.user.id == task.userByCreator.id and task.state == 0}">
| <f:param name="id" value="#{task.id}" />
| <f:param name="tState" value="2"/>
| </s:link>
| </td>
| </tr>
| </table>
| </div>
|
| <s:link onmouseover="showPopup('#{task.code}#{task.id}', event, 'left');"
| value="#{messages['task.changeStateOperation']}#{messages['haveChildren']}"
| rendered="#{authenticator.user.id == task.userByCreator.id and task.state == 0}">
| </s:link>
|
|
| <span>Â Â Â Â Â Â </span>
| <s:link view="/TaskDelayEdit.xhtml"
| value="#{messages['task.operation.delay']}"
| rendered="#{authenticator.user.id == task.userByPrincipal.id and task.project.type == 1 and task.state != 1 and task.state != 2}">
| <f:param name="taskId" value="#{task.id}" />
| <f:param name="tId" value="#{task.id}" />
| <f:param name="taskDelayId"/>
| <f:param name="order" value="createDate desc"/>
| <f:param name="tType" value="#{task.leafFlag}"/>
| <s:conversationPropagation propagation="begin"/>
| </s:link>
|
| </h:column>
| </rich:dataTable>
| </div>
| </rich:panel>
| </a:outputPanel>
|
| </h:panelGrid>
| </rich:panel>
|
| </h:form>
|
| </ui:define>
|
| </ui:composition>
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4095892#4095892
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4095892
18Â years, 9Â months