Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 有条件地将页面中的所有JSF组件作为文本加载_Jsf 2_Facelets - Fatal编程技术网

Jsf 2 有条件地将页面中的所有JSF组件作为文本加载

Jsf 2 有条件地将页面中的所有JSF组件作为文本加载,jsf-2,facelets,Jsf 2,Facelets,在我的JSF2(带Facelets)应用程序中,需要在只读/可编辑模式下打开许多页面。以下是所需的确切行为: 当所有页面组件 显示为文本 用户单击编辑按钮以可编辑模式打开页面 在可编辑模式下,所有组件都可见,可以进行操作 用户进行更改并单击“保存”,这将以只读模式加载页面(即所有文本,无组件) 如果我在页面上有一个文本区域,在只读模式下,我不想将其设置为禁用/只读,而是想要一个outputText。在可编辑模式下,它应表现为TextArea 考虑到我在应用程序的多个页面上需要这种行为,实现这一点

在我的JSF2(带Facelets)应用程序中,需要在只读/可编辑模式下打开许多页面。以下是所需的确切行为:

  • 当所有页面组件 显示为文本
  • 用户单击编辑按钮以可编辑模式打开页面
  • 在可编辑模式下,所有组件都可见,可以进行操作
  • 用户进行更改并单击“保存”,这将以只读模式加载页面(即所有文本,无组件)
  • 如果我在页面上有一个文本区域,在只读模式下,我不想将其设置为禁用/只读,而是想要一个outputText。在可编辑模式下,它应表现为TextArea

    考虑到我在应用程序的多个页面上需要这种行为,实现这一点的合适方式是什么

    我应该写两个组件(textArea和outputText)并操纵它们的渲染属性来显示一个

    是否有可能以某种方式控制JSF上元素的行为并呈现文本而不是组件本身(可能通过编写自定义呈现器)


    非常感谢您的输入。

    您可以创建一个复合组件或标记文件,这样您就可以得到如下结果:

    <my:inputTextArea editable="#{bean.editable}" />
    
    
    
    如果是复合组件,则基本上包含

    <h:inputTextArea rendered="#{cc.attrs.editable}" />
    <h:outputText rendered="#{!cc.attrs.editable}" />
    
    
    
    或者在标记文件的情况下

    <c:choose>
        <c:when test="#{editable}"><h:inputTextArea /></c:when>
        <c:otherwise><h:outputText /></c:otherwise>
    </c:choose>
    

    您可以创建一个复合组件或一个标记文件,这样您就可以得到如下结果:

    <my:inputTextArea editable="#{bean.editable}" />
    
    
    
    如果是复合组件,则基本上包含

    <h:inputTextArea rendered="#{cc.attrs.editable}" />
    <h:outputText rendered="#{!cc.attrs.editable}" />
    
    
    
    或者在标记文件的情况下

    <c:choose>
        <c:when test="#{editable}"><h:inputTextArea /></c:when>
        <c:otherwise><h:outputText /></c:otherwise>
    </c:choose>
    

    感谢大家的投入…:-) Hi找到了一种让它以不同的方式工作的方法。我必须写以下内容:

  • 自定义标记:该标记中的所有元素都具有读/写行为
  • 自定义呈现器:如果页面上的所有文本框、下拉列表等都位于自定义标记下,则该呈现器将呈现这些文本框、下拉列表等
  • 这是我的XHTML

        <rw:readWrite readOnlyOn="#{!rwBean.editMode}">
            <h:panelGrid columns="2">
                <h:outputLabel value="Booking Center P" />
                <h:selectOneMenu id="bookingCentre" value="#{rwBean.bookingCenter}">
                    <f:selectItems value="#{rwBean.bookingCenterList}" />
                </h:selectOneMenu>
    
                <h:outputLabel value="Account Number 1" />
                <h:inputText id="accountNumber1" value="987654" maxlength="7" />
            </h:panelGrid>
        </rw:readWrite>
    
    
    
    基于属性“readOnlyOn”的值,我的自定义标记将在其每个子组件中设置一个属性。 我的自定义渲染器将检查标记上该属性的值,并有条件地渲染标记本身或其“value”属性


    我已经为所有的JSF和PrimeFaces标签实现了这一点,它似乎对我有用

    感谢大家的投入…:-) Hi找到了一种让它以不同的方式工作的方法。我必须写以下内容:

  • 自定义标记:该标记中的所有元素都具有读/写行为
  • 自定义呈现器:如果页面上的所有文本框、下拉列表等都位于自定义标记下,则该呈现器将呈现这些文本框、下拉列表等
  • 这是我的XHTML

        <rw:readWrite readOnlyOn="#{!rwBean.editMode}">
            <h:panelGrid columns="2">
                <h:outputLabel value="Booking Center P" />
                <h:selectOneMenu id="bookingCentre" value="#{rwBean.bookingCenter}">
                    <f:selectItems value="#{rwBean.bookingCenterList}" />
                </h:selectOneMenu>
    
                <h:outputLabel value="Account Number 1" />
                <h:inputText id="accountNumber1" value="987654" maxlength="7" />
            </h:panelGrid>
        </rw:readWrite>
    
    
    
    基于属性“readOnlyOn”的值,我的自定义标记将在其每个子组件中设置一个属性。 我的自定义渲染器将检查标记上该属性的值,并有条件地渲染标记本身或其“value”属性


    我已经为所有的JSF和PrimeFaces标签实现了这一点,它似乎对我有用

    如果我使用您的方法,我将不得不编写许多自定义标记(一个用于inputText,一个用于SelectOne等),但使用这种方法,我只编写了两个类(一个用于组件,一个用于渲染器)。所有组件都将由相同的自定义渲染器渲染,该渲染器会有条件地选择渲染组件本身(如果处于读取模式)或将渲染委托给相应的渲染器(如果处于编辑模式)。如果使用您的方法,我将不得不编写多个自定义标记(一个用于inputText,一个用于SelectOne等),但使用这种方法,我刚刚编写了两个类(一个用于组件,一个用于渲染器)。所有组件都将由相同的自定义渲染器渲染,该渲染器将有条件地选择渲染组件本身(如果处于读取模式)或将渲染委托给相应的渲染器(如果处于编辑模式)。