我在panelGrids中有很多outputLabel和inputText对
<h:panelGrid columns="2">
<h:outputLabel value="label1" for="inputId1"/>
<h:inputText id="inputId1/>
<h:outputLabel value="label2" for="inputId2"/>
<h:inputText id="inputId2/>
...
</h:panelGrid>
Run Code Online (Sandbox Code Playgroud)
我希望所有这些都有一些行为:比如每个inputText的相同验证或相同大小.所以我创建了一个复合组件,它只包含一个outputLabel和一个inputText
<my:editField value="field1"/>
<my:editField value="field2"/>
Run Code Online (Sandbox Code Playgroud)
但是现在当我将它们放在gridPanel中时,根据标签文本的长度,它们不会对齐.我理解为什么,但我不知道如何解决.
我binding在以下问题中阅读了有关属性的组件绑定:
据我所知,它将视图中JSF标记后面的UI组件绑定到UIComponent辅助bean中的属性.但是,我很困惑组件绑定的用途以及何时应该使用它.有人可以用更简单的方式解释它并给出一些实际的例子吗?
我知道我们不能重复在同一个视图树中我们拥有的任何组件的ID.
我有一个页面,其中包含某些条件的其他页面像这样......
<h:panelGroup rendered="#{bean.insertMode == 'SINGLE'}">
<ui:include src="_single.xhtml" />
</h:panelGroup>
<h:panelGroup rendered="#{bean.insertMode == 'DOUBLE'}">
<ui:include src="_double.xhtml" />
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
现在在这些页面中,我有"几乎"相同的组件层次结构(复杂)具有不同的操作行为(不仅方法调用,还有视图),例如:
_single.xhtml
<p:inputText id="fieldID" value="#{bean.value}" />
<p:commandLink actionListener="#{bean.singleAction()}" />
Run Code Online (Sandbox Code Playgroud)
_double.xhtml
<p:inputText id="fieldID" value="#{bean.value}" />
<p:commandLink actionListener="#{bean.doubleAction()}" />
Run Code Online (Sandbox Code Playgroud)
我的小例子工作正常,并按照预期渲染,但我得到了
java.lang.IllegalStateException: Component ID fieldID has already been found in the view.
我知道JSF会处理整个页面,即使它们没有被包含在内,这就是我得到这个例外的原因.
任何聪明的方法来解决这个问题,而无需更改包含页面内的组件的ID(虽然它的工作原理,但异常是烦人的,似乎有些不对劲).
我也不想用一些具有不同ID的容器组件来包装每个页面,因此它们将具有不同的FULL ID,如formId:fieldID,因为母版页也指这些组件中的这些组件!
我发现了一些像这样的类似问题,但是有很多方法可以做到这让我更加困惑.
我们正在获取XML正在阅读的文件.其中XML包含有关需要显示的某些表单字段的信息.
所以我创建了这个DynamicField.java包含我们需要的所有信息的自定义:
public class DynamicField {
private String label; // label of the field
private String fieldKey; // some key to identify the field
private String fieldValue; // the value of field
private String type; // can be input,radio,selectbox etc
// Getters + setters.
}
Run Code Online (Sandbox Code Playgroud)
所以我们有一个List<DynamicField>.
我想迭代这个列表并填充表单字段,使它看起来像这样:
<h:dataTable value="#{dynamicFields}" var="field">
<my:someCustomComponent value="#{field}" />
</h:dataTable>
Run Code Online (Sandbox Code Playgroud)
然后<my:someCustomComponent>将返回相应的JSF表单组件(即label,inputText)
另一种方法是只显示<my:someCustomComponent>,然后返回一个HtmlDataTable带有表单元素.(我认为这可能更容易).
哪种方法最好?有人可以告诉我一些链接或代码,它显示我如何创建这个?我更喜欢完整的代码示例,而不是像"你需要一个子类javax.faces.component.UIComponent" 这样的答案.
我试图有条件地使用建立自定义列表<ui:repeat>.在每次出现-1作为列表中的项目值时,我需要添加换行符.
我尝试在<c:if>里面<ui:repeat>使用它,但它似乎不起作用.它总是评估false.
<ul>
<ui:repeat value="#{topics.list}" var="topicId" >
<li>#{topicId}</li>
<c:if test="#{topicId eq -1}"> <br/> </c:if>
</ui:repeat>
</ul>
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我试图在状态结束时<c:if>有条件地放入一个<h:outputLink>内部<h:dataTable>.
<h:dataTable value="#{bean.items}" var="item" width="80%">
<h:column>
<f:facet name="header">
<h:outputText value="State" />
</f:facet>
<c:if test="#{item.state != 'Finish'}">
<h:outputText value="Missing value" />
</c:if>
<c:if test="#{item.state == 'Finish'}">
<h:outputLink value="myLink">
<h:outputText value="Value = #{item.state}" />
</h:outputLink>
</c:if>
</h:column>
</h:dataTable>
Run Code Online (Sandbox Code Playgroud)
但这不起作用,为什么会这样,我该如何解决?
我<s:set var="buttonText" value="getText('person.button.add')"/>在JSTL中使用buttonText变量来设置文本.
有人告诉我如何在JSF EL中实现这一目标吗?
这里问的问题是JSF形式的IF-ELSE条件.需要知道正确的方法,但被告知作为一个单独的问题.
编辑:
我已经在上面添加了一个链接以获取详细信息,但这里又是
我在struts2项目中使用JSTL
<s:if test="person==null || person.id==null || person.id==''">
<s:set var="buttonText" value="getText('person.button.add')"/>
</s:if>
<s:else>
<s:set var="buttonText" value="getText('person.button.edit')"/>
</s:else>
Run Code Online (Sandbox Code Playgroud)
我想在JSF2中使用相同的方法,但使用表达式语言.我在一个变量中保存值,buttonText并在某个地方访问它#{buttonText}.我需要解决方法如何编写变量EL并使用它.希望清楚.
我只需要解决<s:set var="buttonText" value="getText('person.button.add')"/>代码行.
谢谢
有没有办法告诉JSF它<table>在使用时不应该呈现元素<h:selectOneRadio>?我不使用表格,在这种情况下它完全没有意义.
任何帮助表示赞赏!
我是JSF的新手,在学习构建在线书店应用程序的过程中.
我有1个班级和1个豆子:Book.java和BookCatelogBean.java.Book类有3个属性:id,title和author它相应的getter和setter.该BookCatelogBean包含ArrayList<Book>在那里我用填充它Books(在将来,我将它连接到数据库).
我有两页:index.xhtml和book.xhtml.我想显示index.xhtml每个格式为REST链接的书名列表及其ID book.xhtml,如下所示:<h:link outcome="book?id=#{bookCatelogBean.id}" value="#{bookCatelogBean.title}" />
我知道如何使用BookCatelogBean显示1,book但我想显示所有这些?我有一个想法,调用一个方法来BookCatelogBean调用getAllBooks(),返回每个书籍标题,但我如何将它们中的每一个返回到index.xhtml作为JavaserverFace链接而不是字符串?
谢谢
这是我的代码:
Book.java
package bookshop;
import java.io.Serializable;
public class Book implements Serializable {
private int id;
private String title;
private String author;
public Book(int id, String title, String author){
this.title = title;
this.id = id;
this.author = author;
}
public …Run Code Online (Sandbox Code Playgroud) jsf ×9
jsf-2 ×6
components ×2
jstl ×2
alignment ×1
binding ×1
collections ×1
conditional ×1
datatable ×1
el ×1
facelets ×1
grid ×1
html-table ×1
iteration ×1
lifecycle ×1
loops ×1
uiinclude ×1
uirepeat ×1