1

我创建了 facelet 标记组件,glue:input 和glue:group

输入.xhtml

<?xml version="1.0" encoding="UTF-8"?>

<ui:composition
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ocp="http://java.sun.com/jsf/composite/ocpcommon"
    >

    <c:set var="id" value="#{not empty id ? id : (not empty name ? name : action)}" />
    <c:set var="required" value="#{not empty required and required}" />
    <c:set var="render" value="#{not empty render ? 'panel-group-'.concat(render) : (not empty id ? 'panel-group-'.concat(id) : 'panel-group-'.concat(mame))}" />
    <c:set var="validator" value="#{not empty validator ? validator : 'safeTextValidator'}" />

    <h:panelGroup id="panel-group-#{id}" layout="block" class="clearfix">
        <label for="#{name}" class="#{(not empty required and required) ? 'required' : ''}">#{label}#{(not empty required and required) ? '*&#160;' : ''}</label>
        <div class="input">
            <c:choose>
                <c:when test="#{type == 'java.lang.String' or type == 'text'}">
                    <h:inputText value="#{value}" id="#{name}" styleClass="xLarge span4" required="#{required}" label="#{label}">
                        <f:validator validatorId="#{validator}"/>
                        <f:ajax execute="#{execute}" render="#{render}"  />
                    </h:inputText>
                </c:when>
                <c:when test="#{type == 'java.util.Date' or type == 'calendar'}">
                    <p:calendar value="#{a.value}" id="#{name}" navigator="true" label="#{label}">
                        <p:ajax event="dateSelect" listener="#{listener}" update="panel-group-#{id}" />  
                    </p:calendar>  
                </c:when>
                <c:when test="#{type == 'checkbox'}">
                    <h:selectBooleanCheckbox value="#{value}" id="#{name}" styleClass="xLarge" required="#{required}" label="#{label}">
                        <f:ajax execute="#{execute}" render="#{render}"  />
                    </h:selectBooleanCheckbox>
                    <span>#{inlinehelp}</span>
                </c:when>
                <c:when test="#{type == 'textarea'}">
                    <h:inputTextarea value="#{value}" id="#{name}" styleClass="xLarge span4" required="#{required}" label="#{label}" style="width: 400px; height: 100px;" >
                        <f:ajax execute="#{execute}" render="#{render}"  />
                    </h:inputTextarea>
                </c:when>
                <c:when test="#{type == 'org.eqaula.glue.model.Catalogue' or type == 'select'}">
                </c:when>
                <c:otherwise>
                    <h:inputText value="#{value}" id="#{name}" styleClass="xLarge span4" required="#{required}" label="#{label}">
                        <f:ajax execute="#{execute}" render="#{render}"  />
                    </h:inputText>
                </c:otherwise>
            </c:choose>
            <h:graphicImage value="#{resource['success.gif']}" rendered="#{value != null}"
                            styleClass="validation-status" />
            <span class="help-inline"><br/>#{inlinehelp} <ocp:message forId="#{name}" /></span>
        </div>
    </h:panelGroup>  
</ui:composition>

组.xhtml

<ui:composition
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ocp="http://java.sun.com/jsf/composite/ocpcommon"
    >
    <c:set var="id" value="#{not empty id ? id : (not empty name ? name : action)}" />
    <c:set var="required" value="#{not empty required and required}" />
    <c:set var="group" value="#{not empty group ? group : null}" />

    <h:panelGroup id="panel-group-#{id}" layout="block" class="clearfix">
        <label for="#{name}" class="#{(not empty required and required) ? 'required' : ''}">#{label}#{(not empty required and required) ? '*&#160;' : ''}</label>
        <div class="input">
            <p:commandButton id="button-#{id}" action="#{controller[addAction]}" process="@this" 
                             value="#{messages['common.add']} #{label}" ajax="true"
                             icon="ui-icon-plus" update="group-data-table-#{id}"/>  
            <p:dataTable var="m" value="#{group.members}" id="group-data-table-#{id}" 
                         editable="true" rendered="#{not empty group.members}"
                         selection="#{controller[bussinesEntity]}" >  

                <f:facet name="header">  
                    #{group.attribute.label}
                </f:facet>  
                <!-- //TODO activar ajax
                <p:ajax event="rowEdit" listener="#{controller[editListener]}" update=":form:messages" />  
                <p:ajax event="rowEditCancel" listener="#{tableBean.onCancel}" update=":form:messages" />  
                -->
                <p:column headerText="#{messages['common.name']}" style="width:125px">  
                    <p:cellEditor>  
                        <f:facet name="output">  
                            <h:outputText value="#{m.name}" />  
                        </f:facet>  
                        <f:facet name="input">  
                            <p:inputText value="#{m.name}" style="width:100%"/>  
                        </f:facet>  
                    </p:cellEditor>  
                </p:column>  
                <p:column headerText="#{messages['common.options']}" style="width:50px">  
                    <p:rowEditor />  
                </p:column>  
            </p:dataTable>  
        </div>
        </h:panelGroup>
</ui:composition>

输入和组标签在此页面中呈现良好,包含输入标签在保存按钮中工作正常:

<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"
      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:fn="http://java.sun.com/jsp/jstl/functions"
      xmlns:p="http://primefaces.org/ui"
      xmlns:s="http://jboss.org/seam/faces"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
      xmlns:glue="http://eqaula.org/jsf/facelets"
      xmlns:ocp="http://java.sun.com/jsf/composite/ocpcommon">
    <ui:composition  template="/WEB-INF/view/templates/glue.xhtml">
        <ui:define name="content">
            <f:metadata>
                <f:viewParam name="id" value="#{profileHome.profileId}" />
                <s:viewAction action="#{profileHome.load}" if="#{conversation.transient}"/>
            </f:metadata>
            <h2>#{messages['common.edit']} #{messages['Profile']}: #{profileHome.instance.fullName}</h2>
            <h:form id="profile">

                <div class="actions">
                    <h:commandButton id="save" action="#{profileHome.saveAjax()}" value="#{messages['common.save']}" styleClass="btn primary"/>
                    &nbsp;
                    <h:commandButton action="/pages/home.xhtml?faces-redirect=true"
                                     value="#{messages['common.cancel']}" styleClass="btn" immediate="true"/>
                </div>
                <!-- Attributos para usuario -->

                <glue:input id="fstn" name="firstname" type="text" label="#{messages['common.firstname']}" value="#{profileHome.instance.firstname}" required="true" inlinehelp="#{messages['common.firstname.inlinehelp']}" execute="@this save" render="fstn"/>

                <glue:input id="srn" name="surname" type="text" label="#{messages['common.surname']}" value="#{profileHome.instance.surname}" required="true" inlinehelp="#{messages['common.surname.inlinehelp']}" execute="@this save"/>

                <glue:input id="cod" name="code" type="text" label="#{messages['profile.dni']}" value="#{profileHome.instance.code}" required="false" inlinehelp="#{messages['profile.dni.inlinehelp']}" execute="@this save"/>

                <glue:input id="eml" name="text" type="email" label="#{messages['common.email']}" value="#{profileHome.instance.email}" required="true" validator="emailValidator" inlinehelp="#{messages['common.email.inlinehelp']}" execute="@this save"/>

                <glue:input id="emlSecret" name="emailSecret" type="checkbox" value="#{profileHome.instance.emailSecret}" required="true" inlinehelp="#{messages['common.keepemailsecret']}" execute="@this save"/>

                <glue:input id="bio" name="bio" type="textarea" label="#{messages['common.bio']}" value="#{profileHome.instance.bio}" required="false" inlinehelp="#{messages['common.bio.inlinehelp']}" execute="@this save"/>

                <!-- Atributos par administrador -->

                <!-- Attributos personalizados -->
                <c:forEach items="#{profileHome.instance.attributes}" var="a" >
                    <glue:input id="#{a.structureAttribute.id}" name="#{a.name}" type="#{a.type}" label="#{a.structureAttribute.label}" value="#{a.value}" required="#{a.structureAttribute.required}" inlinehelp="#{a.structureAttribute.helpInline}" execute="@this save" listener="#{account.saveAjax()}" render="#{a.structureAttribute.id} #{a.structureAttribute.render != null ? a.structureAttribute.render : ''}"/>
                </c:forEach>
                <!-- Atributos relación -->
                <glue:group id="#{profileHome.findGroup('spouse').id}" label="#{profileHome.findGroup('spouse').attribute.label}" group="#{profileHome.findGroup('spouse')}" inlinehelp="#{profileHome.findGroup('spouse').attribute.helpInline}"
                            controller="#{profileHome}"
                            addAction="addAction"
                            editListener="editListener">
                </glue:group>

            </h:form>
        </ui:define>
    </ui:composition>
</html>

在 group.xhtml 中,p:commandButton 应该将 addAction 触发到 profileHome bean

@Named
@ViewScoped
public class ProfileHome

   ....

 public void addAction() {
            System.out.println("TODO rowAddAction");
        }

按钮不起作用!我尝试隔离页面中的按钮,这在没有标签胶水:输入或胶水:组的情况下有效。

请给个建议。

PD。我使用 primefaces 4.3.1、jsf2、jboss AS7、seam3

4

0 回答 0