小编mre*_*isz的帖子

何时使用<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万
查看次数

如果存在具有手动设置属性的同一类的另一个bean,则不会发生自动装配

我想通过xml配置文件创建两个相同类的bean.该类有一个带有注释的setter,可以用spring填充.在其中一个bean定义中,我还手动提供值以覆盖注释中的一个.但是当我这样做时,弹簧不再处理注释布线.

这是一个演示此效果的最小代码,用于@Value简单,但它与以下内容相同@Autowired:

import org.springframework.beans.factory.annotation.Value;

import javax.annotation.PostConstruct;

public class AutowireTest {
  public String testField;

  @PostConstruct
  public void init() {
    if (testField == null)
      throw new RuntimeException("FAIL");
  }

  @Value("default")
  public void setTestField(String testField) {
    this.testField = testField;
  }
}
Run Code Online (Sandbox Code Playgroud)

和spring配置:

<bean id="au_test1" class="AutowireTest">
  <property name="testField" value="manual"/>
</bean>

<bean id="au_test2" class="AutowireTest"/>
Run Code Online (Sandbox Code Playgroud)

如果我删除<property name="testField" value="manual"/>,两个bean都会收到"默认".如果它在那里第二个bean抛出一个异常.我查看了spring代码并AutowiredAnnotationBeanPostProcessor使用了injectMetadataCache,其中类是注入元数据的键,这意味着为一个bean设置特定属性会禁用其他实例的自动装配.

知道为什么会这样吗?如何才能实现类似的效果,不一定是字符串值,也适用于对象bean?

编辑:我希望有一个属性,有多个匹配的候选人.一个被标记为primary.除非我通过xml手动指定候选者,否则我希望将主要的候选者连接起来.我最初的方法是使用@Autowired这个属性,但由于这不起作用,我正在寻找替代方案.出于某种原因,我不想使用bean继承.

编辑2:如果我交换这两个bean定义,问题不会发生.该属性自动装配好,直到第一次检测到手动覆盖.这意味着,这不是一个intented功能,因为它会导致怪异,难以检测与预期不被有线依赖一些项目的bug.

java spring dependency-injection

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

动态ui:包括ui内部:重复.有简单的解决方案吗?

我想动态选择一个facelet来渲染我的数据列表中的一些项目.第一次尝试将是:

<ui:repeat value="#{panels}" var="panel">
  <ui:include src="#{panel.facelet}">
</ui:repeat>

但是因为ui的src所以它不会起作用:include太早评估了.facelet信息是真正动态的,所以我不能使用c:forEach(不是真的建议与facelets混合使用).我想这一切都归结为找到一个基于ui的组件:包括替代品.

是否有这样的事情或者我需要自己编写?

java jsf facelets

6
推荐指数
2
解决办法
5324
查看次数

多次调用ActionListener(Bug?) - Mojarra 2.1.3

我有以下按钮:

   <h:commandButton 
     disabled="#{mybean.searching}"
     binding="#{mybean.searchButton}"
     actionListener="#{mybean.searchForLicenses}"
     value="Search" />
Run Code Online (Sandbox Code Playgroud)

当我调试时,我看到actionListener首先被调用两次,然后被调用三次,接下来单击四次,依此类推.

似乎每次重新加载时actionListener都会再次注册.

我正在使用Mojarra 2.1.3(也尝试过2.0.6)和Tomcat 7和IceFaces.

绑定是这样完成的:

private javax.faces.component.UICommand searchButton;

public void setSearchButton(UICommand searchButton) {
  this.searchButton = searchButton;
}

public UICommand getSearchButton() {
  return searchButton;
}
Run Code Online (Sandbox Code Playgroud)

jsf icefaces mojarra

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