Jsf 2 有条件地将页面中的所有JSF组件作为文本加载
在我的JSF2(带Facelets)应用程序中,需要在只读/可编辑模式下打开许多页面。以下是所需的确切行为:Jsf 2 有条件地将页面中的所有JSF组件作为文本加载,jsf-2,facelets,Jsf 2,Facelets,在我的JSF2(带Facelets)应用程序中,需要在只读/可编辑模式下打开许多页面。以下是所需的确切行为: 当所有页面组件 显示为文本 用户单击编辑按钮以可编辑模式打开页面 在可编辑模式下,所有组件都可见,可以进行操作 用户进行更改并单击“保存”,这将以只读模式加载页面(即所有文本,无组件) 如果我在页面上有一个文本区域,在只读模式下,我不想将其设置为禁用/只读,而是想要一个outputText。在可编辑模式下,它应表现为TextArea 考虑到我在应用程序的多个页面上需要这种行为,实现这一点
非常感谢您的输入。您可以创建一个复合组件或标记文件,这样您就可以得到如下结果:
<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找到了一种让它以不同的方式工作的方法。我必须写以下内容:
<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找到了一种让它以不同的方式工作的方法。我必须写以下内容:
<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等),但使用这种方法,我刚刚编写了两个类(一个用于组件,一个用于渲染器)。所有组件都将由相同的自定义渲染器渲染,该渲染器将有条件地选择渲染组件本身(如果处于读取模式)或将渲染委托给相应的渲染器(如果处于编辑模式)。