【问题标题】:Can't we give two values for one lable in JSF?我们不能在 JSF 中为一个标签提供两个值吗?
【发布时间】:2014-01-07 06:12:10
【问题描述】:

我有一个标签字段,即许可证,我想为此提供两个许可证号..如何在此处提供两个值。我有一个属性文件(manageprofile)和一个包含许可证值的 java 类(manageprofiledatabean)

<h:outputLabel value="#('label.manageprofile.license')"/>

    <h:outputText value="#{manageProfileDataBean.license}"  />

    &nbsp;&nbsp;

    <h:outputText escape="false" value="&nbsp;&nbsp;"></h:outputText>

【问题讨论】:

  • 试图澄清事情:manageprofileResource Bundle?第二个许可证值字段的名称是什么?

标签: jsf


【解决方案1】:

首先,h:outputLabel 用于标记输入控件 - 它呈现为 html &lt;label&gt; 标记(例如)

<h:outputLabel for="myname" value="#{bean.labelValue}" />
<h:inputText id="myname" value="#{bean.name} />

如果您需要在表达式语言中指定多个值,您可以这样做:

<h:outputText value="#{bean.property1 bean.property2}"/>

所以我猜在你的情况下你会写成

<h:outputText value="#{'label.manageprofile.license' manageProfileDataBean.license}" />

最后,如果您没有引用任何属性,则不需要使用 h:outputText,因此最后一对 nbsp 字符根本不需要在 outputText 标记中。

【讨论】:

  • 您的 EL 无效。没有#(),您的财产访问权限可能应该是#{bean.property1} #{bean.property2}
  • 不,你不必使用表达式来表示值,纯文本就可以了——不寻常,但很好——你自己试试。第二点也不正确,您可以在 #{} 语法中连接属性。
  • 我们谈论 JSR-245 EL?也许你打算写bean.property1 + bean.property2?而且我知道复合表达式,只是#()#(} 不是合法的EL 表达式。
  • 修复了 ( 错字并更新了标签示例以更真实。您可以使用 + 运算符,但这不是必需的!我在 tomcat 7 上使用标准参考 jsf 实现进行了测试,它可以工作跨度>
  • 其实,you can't in <EL-3.0+ 是算术运算符,您需要将 bean.property1.concat(bean.property2) 用于字符串。不知道为什么空间适合你。也许有人可以阐明这一点,我很感兴趣。
【解决方案2】:

将两个值合并到 manageProfileDataBean 的一个字符串变量中,然后将其设置为

public class ManageProfileDataBean{

private String license = "";
private String val1 = "val1":
private String val2 = "val2";

public ManageProfileDataBean(){
      license = val1+val2;
}

//setter getter

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多