相关疑难解决方法(0)

何时使用<ui:include>,标记文件,复合组件和/或自定义组件?

我最近开始使用带有Facelets的JSF 2.0,并且对于了解<ui:include>Facelets 1.x提供的现有和其他模板技术的新复合组件感到困惑.

这些方法有什么区别?从功能上看,它们似乎提供了相同的:<ui:param>vs <cc:attribute>,<ui:insert>+ <ui:define>vs标记文件,重用现有模板.除了复合组件的语法和清晰的接口规范之外还有什么吗?性能会有所不同?

facelets tagfile custom-component composite-component jsf-2

95
推荐指数
1
解决办法
5万
查看次数

Ajax更新/呈现不适用于具有呈现属性的组件

我正在尝试ajax更新有条件渲染的组件.

<h:form>
    ...
    <h:commandButton value="Login" action="#{login.submit}">
        <f:ajax execute="@form" render=":text" />
    </h:commandButton>
</h:form>
<h:outputText id="text" value="You're logged in!" rendered="#{not empty user}" />
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.我可以保证这#{user}实际上是可用的.这是怎么造成的,我该如何解决?

jsf rendered-attribute jsf-2 conditional-rendering ajax-update

46
推荐指数
1
解决办法
5万
查看次数

当我想要ajax-update时,为什么我需要在另一个组件中嵌入一个带有render ="#{some}"的组件?

所以我找到了一些接近这个的答案,我发现足以解决我遇到的问题.但即使这样,我也很好奇了解这方面的运作方式.让我用一个例子来说明:

我有一个.xhtml看起来像这样(缩短)的facelet 页面.

<h:form id="resultForm">

    <h:panelGroup class="search_form" layout="block">
        <h:inputText id="lastname" value="#{search.lastname}"/>
        <h:commandButton action="#{search.find}" value="Find">
            <f:ajax execute="lastname" render="resultDisplay"/>
        </h:commandButton>
    </h:panelGroup>

    <h:dataTable value="#{search.searchResults}" var="results" id="resultDisplay"
            rendered="#{!empty search.searchResults}">  
        <h:column>
            #{results.field}
        </h:column>
    </h:dataTable>

</h:form>
Run Code Online (Sandbox Code Playgroud)

现在,为了突破性,我不会发布所有的支持bean代码,但我有这样的东西:

public void find() {
    searchResults = setResults(true);
}
Run Code Online (Sandbox Code Playgroud)

哪里searchResultsArrayList<Objects>.在搜索之后,它不是null - 在多个测试中检查(可以为null,但不在我正在进行的测试中).

现在.这不起作用.

但是,如果我将dataTable内部嵌套在另一个内部panelGroup,那么它会起作用.

<h:panelGroup id="resultDisplay">
    <h:dataTable value="#{search.searchResults}" var="results"
        rendered="#{!empty search.searchResults}">  
        <h:column>
            #{results.field}
        </h:column>
    </h:dataTable>
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)

现在,这种变化可以让一切正常.我对此感到满意......但我想我也在寻求一些理解.有关为什么我必须嵌套这些组件的任何见解?我肯定错过了一些东西!

jsf facelets jsf-2 conditional-rendering ajax-update

32
推荐指数
1
解决办法
2万
查看次数

替代ui:JSF中的片段

我正在搜索一种支持的方式来渲染JSF中的一段代码,我通常使用这种方法:

<ui:fragment rendered="#{condition}">
   <h:outputText value="text 1"/>
   <h:outputText value="text 2"/>
   <h:outputText value="text 3"/>
</ui:fragment>
Run Code Online (Sandbox Code Playgroud)

由于ui:fragment不支持渲染大部分IDE(如netbeans将其标记为错误但是它可以工作,因为在JSF参数中是继承的.

解决此问题的一种方法是使用另一种结构(例如,如果您使用SEAM)

<s:div rendered="#{condition}">
   ....
</s:div>
Run Code Online (Sandbox Code Playgroud)

另一种方法是在所有内部内容中设置渲染,如下所示:

<h:outputText value="text 1" rendered="#{condition}"/>
<h:outputText value="text 2" rendered="#{condition}"/>
<h:outputText value="text 3" rendered="#{condition}"/>
Run Code Online (Sandbox Code Playgroud)

但我不喜欢这种方式,因为你必须将渲染添加到每个元素.

另一种方法是使用<c:if test="#{condtion}">BUT c:如果从JSF树中删除元素,而不是你总是想要做的,特别是如果你使用AJAX.

所以你们有另一种解决方案吗?

java jsf

25
推荐指数
1
解决办法
3万
查看次数

是否可以使用JSF ajax更新非JSF组件(纯HTML)?

是否可以更新我的页面中不是JSF组件的部分?

例如,我可以更新纯HTML,<div>还是需要将其包装在JSF组件中?

html ajax jsf jsf-2

11
推荐指数
1
解决办法
1万
查看次数

非JSF组件的条件呈现(普通的HTML和模板文本)

我试图有条件地渲染一个<tr>因此我不能使用<h:panelGroup>,因为它将渲染<span> or <div>

我目前的(工作)方法如下:

<h:outputFormat rendered="#{negotiator.maySend}">
    <tr> my tr stuff </tr>
</h:outputFormat>
Run Code Online (Sandbox Code Playgroud)

这是有效的,但我不确定这是否是滥用的方式<h:outputFormat>- 在我使用之前,<h:outputLabel>但这是<label>在IE 中呈现的.

我也已经阅读了这个问题的答案,但如上所述,它们不会对我有用,因为<tr>:如何不在JSF中渲染整个块?

html jsf conditional-rendering

11
推荐指数
1
解决办法
9671
查看次数

如何在JSF 2.0中重定向

我想从JSF页面中的链接重定向,我该怎么办?

在HTML中我可以使用<a>标签.但是在JSF中我使用<h:outputLink>或者<h:commandLink>可以有条件地渲染它们.我希望将链接重定向到同一应用程序中的其他页面或外部URL.我怎么能用JSF做到这一点?如何使用action<h:commandLink>此?

jsf redirect commandlink

7
推荐指数
1
解决办法
2万
查看次数

<a jsf:rendered="#{...}">不会被解释为passthrough元素

我不明白为什么这段代码工作正常:

<h:link value="Login" rendered="#{sessionBean.userInSessionBean == null}"  />
Run Code Online (Sandbox Code Playgroud)

而这段代码不起作用:

<a jsf:rendered="#{sessionBean.userInSessionBean == null}">Login</a>
Run Code Online (Sandbox Code Playgroud)

jsf rendered-attribute jsf-2.2 passthrough-elements

4
推荐指数
1
解决办法
337
查看次数

我应该使用 ui:fragment 和 render 属性来有条件地在带有 JSF 2.2 的 Facelets 中呈现 HTML 标签吗?

我正在将旧项目从 JSF 1.1 升级到 JSF 2.2。具体来说,我将 JSF 实现从 MyFaces 1.1 升级到 MyFaces 2.2.12,用 Facelets 替换 JSP 并升级/替换过时的标签库。我主要使用从 JSF 1.2 迁移到 JSF 2.0作为指南。

该项目使用了一些在其 JSP 页面中htmLib使用命名空间调用的标记库http://jsftutorials.net/htmLib。我再也找不到关于这个标签库的任何文档,无论是在 jsftutorials 网页还是其他地方,但显然它被用来包含像JSP 页面<div><table>在 JSP 页面中的纯 HTML 标签。

由于现在可以在带有 JSF2 的 XML Facelets 中使用纯 HTML 标记,因此我现在正在从htmLibtaglib 中删除所有出现的标记,<htm:div>...</htm:div>例如<div>...</div>.

但是,从使用的一些标签htmLib包含render用于条件渲染的属性,如下所示:

<htmLib:h4 render="someCondition">
   ...
</htmLib:h4>
Run Code Online (Sandbox Code Playgroud)

因为纯 HTML 标签没有render用于此目的的属性,所以我正在寻找一种有条件地呈现纯 HTML 标签的替代方法,并在 SO 上偶然发现了这个答案:如何有条件地呈现像 <div> 这样的纯 HTML 元素? …

jsf facelets taglib jsf-2.2

3
推荐指数
1
解决办法
2807
查看次数

在EL表达式中使用多个布尔条件

我想知道如何在EL中组合多个布尔条件.我有以下示例,它不起作用.

<x:someComponent rendered="#{bean.condition1} or #{bean.condition2}">
Run Code Online (Sandbox Code Playgroud)

如何在EL中使用"OR"和"AND"逻辑运算符?

jsf el or-operator and-operator

2
推荐指数
1
解决办法
5333
查看次数