相关疑难解决方法(0)

ui:repeat不适用于f:selectItem

我正在使用icefaces选择菜单从用户列表中选择一个用户,我想为每个用户重复selectItem这里是我尝试的:

<ice:selectOneMenu id="users">
    <ui:repeat value="#{user.getUserList()}" var="user">
        <f:selectItem itemLabel="#{user.name}" itemValue="#{user.id}"/>
    </ui:repeat>               
</ice:selectOneMenu> 
Run Code Online (Sandbox Code Playgroud)

的UserBean:

@Component("user")
@Scope("view")
Public class UserBean{

Public List<User> getUserList() throws Exception {
        return userService.getAllUsers();
    }

}
Run Code Online (Sandbox Code Playgroud)

注意: UserBean不包含属性id,它们存在于用户实体中的名称.请指教,谢谢.

icefaces facelets jsf-2 icefaces-1.8

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

使用向导时,如何将输入框值绑定到支持Bean属性中的映射值

我正在使用Primefaces向导组件.在一个选项卡上,我基于先前的选项卡输入(用户类型)动态创建输入框.输入框文本标签是从列表派生的.在我的支持bean中,我有一个地图,其中包含输入标签作为键,输入框输入作为值.

点击下一步,我想用用户输入(对应键)更新地图(值)

<c:forEach items="#{gdsiGeodataBean.actionCommand.fields}" var="reqs">
  <h:outputLabel for="#{reqs.name}" value="#{reqs.name}:* " />  
  <pou:inputText value="#{gdsiGeodataBean.actionCommand.values['reqs.name']}"  required="true" requiredMessage="Input is required."/> 
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

我的支持豆:

private List<RequiredParam> fields; // +getter (no setter required)
private Map<String, String> values; // +getter (no setter required)

public CommandAction(String actionName, String actionParams, String context) {
    this.actionName = actionName;
    this.actionParams = actionParams;
    this.contextName = context;

    //Set up parameters
    getRequiredParams();
    getOptionalParams();
    fields = getFields();
    values = new HashMap<String, String>();
}
Run Code Online (Sandbox Code Playgroud)

基本上我想要的是使用textinput框中的用户输入更新地图值.

jsf binding map primefaces

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

渲染 h:panelGroup 位于 c:forEach 内时出现错误的 id

我有一个页面,我在其中渲染一些 h:panelGroup 面板。这些面板在启动时作为在插件注册表中注册的插件来实现。插件 api 的一部分是一个自定义 jsf 组件,我在其中获取扩展点的注册插件,并按路径包含它们的 Facelet 模板:

<c:forEach items="#{pluginRegistry.getPlugins(point)}" var="extension">
    <ui:include src="#{extension.path}" />
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

我包含面板的页面如下所示:

<h:panelGrid id="dashboard" columns="3">
    <cmf:insertPageFragments point="dashboardExtensionPoint" />
</h:panelGrid>
Run Code Online (Sandbox Code Playgroud)

对于每个面板,都有如下所示的 Facelet 模板:

<rich:panel id="caseDetailsPanel" header="panel label">
    <!-- panel content -->
</rich:panel>
Run Code Online (Sandbox Code Playgroud)

现在的问题是,pluginsRegistry 返回的列表中的第一个面板是在页面中呈现的,其中包含提供的 id,例如 formId:caseDetailsPanel。其余的都生成了像 formId:j_idt223 这样的 id!显然,如果我想重新渲染一些面板,我不能这样做。

当环境是 jboss AS 7.1 和 JSF 2.1、richfaces 4.2.3.Final 时,就会发生这种情况。当部署在 jboss-eap-6.1 上时,一切看起来都很好,但现在我无法使用这个 jboss 版本。

关于如何解决此问题有什么建议吗?

jboss jstl richfaces jsf-2

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

JSF Backing Bean构造函数多次调用

我正在尝试使用JSF 2.0(过去几个月使用ICEfaces 1.8之后),我试图找出为什么在JSF 2.0中我的支持bean构造函数被多次调用.

bean应该在创建时实例化一次,但每当我单击commandButton时,就会显示"Bean Initialized"文本,指示一个新的Bean对象被实例化.

facelet页面:

    <?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">

    <h:body>
        <div id="content">
            <h:form id="form">
                <h:commandButton value="Toggle" action="#{bean.toggleShowMe}"/>
            </h:form>


            <h:panelGrid rendered="#{bean.showMe}">
                <h:outputText value="Show me!"/>
            </h:panelGrid>
        </div>
    </h:body>
</html>
Run Code Online (Sandbox Code Playgroud)

支持bean:

@ManagedBean
@RequestScoped
public class Bean {
    private boolean showMe = false;

    public boolean isShowMe() {
        return showMe;
    }

    public void setShowMe(boolean showMe) {
        this.showMe = showMe;
    }

    public void toggleShowMe(){
        System.out.println(showMe);
        if(showMe==true){
            showMe=false;
        }else{
            showMe=true;
        }
    }
    /** Creates a new instance of Bean */
    public Bean() …
Run Code Online (Sandbox Code Playgroud)

jsf icefaces jsf-2

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

如何在JSF中设置变量?

我的代码在这里迭代每一行的列,rendered每次迭代都会计算属性,过度调用testRule.

<p:dataTable ...>
    <p:column ...>
        ...
    </p:column>

    <p:column rendered="#{managedBean.testRule('rules.canDoActions')}">
        <!-- Action buttons -->
        <h:commandButton ...>
        <h:commandButton ...>
    </p:column>
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)

为了获得更好的性能,我想知道将结果设置为变量,但我不知道如何......它会变成这样:

   <?:??? var="canDoActions" value="#{managedBean.testRule('rules.canDoActions')}">
   <p:dataTable ...>
        <p:column ...>
            ...
        </p:column>

        <p:column rendered="#{canDoActions}">
            <!-- Action buttons -->
            <h:commandButton ...>
            <h:commandButton ...>
        </p:column>
    </p:dataTable>
Run Code Online (Sandbox Code Playgroud)

此外,我不允许使用核心标记库,这意味着这<c:set ../>是不可能的.

在该范围内,我如何设置变量?或者,如果不可能,您建议如何解决性能问题?

java variables jsf jstl el

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

根据哈希映射列表动态生成h:列

在我的应用程序中,我想显示一个<h:dataTable>带有托管bean的属性.目前这个表是从a创建的List<Folder>.现在我想改变Folder一些更有活力的东西.那是因为Folder如果我决定稍后添加另一个字段,我不想更改该类.我只需要添加另一个条目Map<String, Object>而不是引入一个新字段Folder.

那么,是否有可能绑定List<Map<String, Object>><h:dataTable>

datatable jsf dynamic jsf-2

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

c:选择多个c:when - fall-through开关

如果我在我的jsf页面上有这个代码:

<c:choose>
    <c:when test="${empty example1}">
    </c:when>

    <c:when test="${empty example2}">
    </c:when>

    <c:otherwise>
    </c:otherwise>     
</c:choose>
Run Code Online (Sandbox Code Playgroud)

它将像java switch语句一样工作casebreak- 如果第一次是真的,第二次不会测试,对吧?

我应该写什么来获得" switch声明case但没有break":

当第一个C:when是真的东西添加到页面,当第二个是真时,某些东西也会添加到页面

jsf loops jstl break

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

<c:当test>评估总是false

这被称为3次,每行一次.(示例表有3行)

....
<ui:param name="rowIndex"   value="#{cc.attrs.rowIndex}" />
<ui:param name="rowActive"  value="#{cc.attrs.activeRow}" />
<c:set var="index"          value="#{rowIndex}"  type="java.lang.Long"/>
<c:set var="activeRowIndex" value="#{rowActive}" type="java.lang.Long"/>

<c:choose>
    <c:when test="${index == 2}">
        ACTIVE
    </c:when>
    <c:when test="${index != activeRowIndex}">
       ${index} - ${activeRowIndex} - INACTIVE
    </c:when>
    <c:otherwise>
       NONE
    </c:otherwise>
</c:choose> 
....
Run Code Online (Sandbox Code Playgroud)

结果:

0 - 1 - 不活跃

1 - 1 - 不活跃

2 - 1 - 不活跃

我原以为:

0 - 1 - 不活跃

没有

活性

我很无能为什么结果与我的预期有很大的不同.所以我希望你能帮助我:-)

jsf jstl facelets composite-component

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

立即和默认评估EL

让我们有一些1.xhtml包含的facelet

<h:inputText id="prop" value="#{MyBean.myProperty}"/>
Run Code Online (Sandbox Code Playgroud)

2.xhtml包含的facelet

<h:inputText id="prop" value="${MyBean.myProperty}"/>
Run Code Online (Sandbox Code Playgroud)

从官方教程引用:

Immediate evaluation means that the expression is evaluated and the result returned as soon as the page is first rendered. 
Run Code Online (Sandbox Code Playgroud)

我不明白立即表达的具体阶段是什么?在Render Response阶段或Update model valuesApply request或什么?

jsf el

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

有关在ui:repeat中呈现的子类的PropertyNotFoundException

我有一个超类Person:

public class Person {
    public abstract Type getType();
}
Run Code Online (Sandbox Code Playgroud)

我有2个子类:

public class JuridicalPerson extends Person {
    public Type getType() {
        return Type.JP;
    }
    public List<JuridicalBelong> getJuridicalBelongs() {
        return juridicalBelongs;
    }
}
Run Code Online (Sandbox Code Playgroud)
public class NaturalPerson extends Person {
    public Type getType() {
        return Type.NP;
    }
    public List<NaturalBelong> getNaturalBelongs() {
        return naturalBelongs;
    }
}
Run Code Online (Sandbox Code Playgroud)

JuridicalBelongNaturalBelong具有不同的属性,不能被子类化.

我将它们放在List<Person>JSF/Facelets中,如下所示:

<ui:repeat value="#{bean.persons}" var="person">
    <h:panelGroup rendered="#{person.type eq 'JP'}">
        <ui:repeat value="#{person.juridicalBelongs}" var="juridicalBelong">
            ...
        </ui:repeat>
    </h:panelGroup>
    <h:panelGroup rendered="#{person.type eq 'NP'}">
        <ui:repeat …
Run Code Online (Sandbox Code Playgroud)

jsf conditional el jsf-2 uirepeat

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