GVKun编程网logo

selectOneMenu的第二个粗体项

15

在本文中,我们将为您详细介绍selectOneMenu的第二个粗体项的相关知识,此外,我们还会提供一些关于'UnexpectedTagNameException'andElementshouldhav

在本文中,我们将为您详细介绍selectOneMenu的第二个粗体项的相关知识,此外,我们还会提供一些关于'UnexpectedTagNameException' and Element should have been “select” but was“div” error using 'Select' function through Selenium java、 的 PrimeFaces 、ajax – a4j:support – 从h检索的值:selectOneMenu始终为NULL、ajax – 如何在selectOneMenu中将值传递给Listener的有用信息。

本文目录一览:

selectOneMenu的第二个粗体项

selectOneMenu的第二个粗体项

我有一个全州所有城市的selectOneMenu。我已经编写了一个SQL将资金放在首位,但是我想将其加粗以使使用它的人更容易理解。有没有办法加粗它或做其他事情以使第二个选项更可见?

<h:selectOneMenu value="#{someBean.cityId}">     <f:selectItems value="#{addressBean.stateList}" /></h:selectOneMenu>

答案1

小编典典

<option>由生成的HTML 元素只<f:selectItems>允许很少的细粒度样式,而CSS支持则取决于浏览器。您 可以 使用CSS3
:nth-child伪选择器。例如

<h:selectOneMenu value="#{someBean.cityId}" style>    <f:selectItems value="#{addressBean.stateList}" /></h:selectOneMenu>

.cities option:nth-child(2) {    font-weight: bold;}

但这并不适用于所有浏览器。只有Firefox会吃,而MSIE和Chrome不会。后两个不这样做,因为它们不允许font-weight在选项上进行设置。但是它们允许您通过color或更改(背景)颜色background-color

.cities option:nth-child(2) {    background-color: pink;}

到目前为止,这在所有支持CSS3的浏览器中都有效(即,因此不适用于MSIE8或更早版本)。

如果你想要最好的跨浏览器兼容,你需要更换<select><ul><li>具有良好一堆CSS /
JS代码,使它看起来像一个真正的下拉一起。然后,您可以分别设置<li>元素的样式。您可以放入一些jQuery插件或寻找第3个JSF组件库。PrimeFaces
3.0具有一个完全可以做到这一点的<p:selectOneMenu>组件。

'UnexpectedTagNameException' and Element should have been “select” but was“div” error using 'Select' function through Selenium java

'UnexpectedTagNameException' and Element should have been “select” but was“div” error using 'Select' function through Selenium java

在这种形式的下拉列表中,选择不起作用。

我为此写代码

    public static void main(String[] args) throws InterruptedException     {    WebDriver driver =new ChromeDriver();    //driver.manage().window().maximize();    driver.get("http://www.ia.ca/");    Thread.sleep(3000);    driver.findElement(By.xpath("//*[@id=\"nav-secondaire\"]/div[1]/ul/li[4]/a")).click();    driver.findElement(By.xpath("//*[@id=\"nav-secondaire\"]/div[1]/ul/li[4]/ul/li[1]/section/ul/li[1]/a")).click();   //DropDown code    WebElement selectMyElement =driver.findElement(By.xpath("//*[@id=\"grille-zone-cta\"]/div/div/div/div/div/div[2]/div[1]"));    Select cal = new Select(selectMyElement);    cal.selectByIndex(1);

它给了我例外

‘UnexpectedTagNameException’

错误消息是

元素应为“选择”但为“ div”

答案1

小编典典

This error message…

''UnexpectedTagNameException'' : Element should have been "select" but was "div"

…暗示您已使用Select类与元素进行交互,其中元素为<div>

click()在文本上具有借入能力的元素上,可以使用以下定位策略:

  • xpath:
        new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//h4[@bta-description'' and text()=''Our calculators'']//following::div[@bta-select-table row'']//b[@button'']"))).click();        new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@selectric-items'']//li[contains(., ''Borrowing Capacity'')]"))).click();

<p:selectOneMenu> 的 PrimeFaces <p:importEnum>

的 PrimeFaces

如何解决<p:selectOneMenu> 的 PrimeFaces <p:importEnum>?

所以我正在创建一个 web 应用程序,它应该显示一个下拉框,其中包含枚举中的所有值。我发现 this question 确实提供了我需要的所有信息。遗憾的是,我不能使用这样的代码,因为它会引发错误。

一、枚举:

public enum Status {
    YES("Yes"),NO("No"),OPT_IN("Opt in");
    
    private String label;

    Status(String label) {
        this.setLabel(label);

    }

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }

}

现在是 xhtml 页面:

<p:importEnum type="package.name.Status"/>
<p:outputLabel for="statusDropdown" value="Status:" />
<p:selectOneMenu id="statusDropdown" 
    value="#{model.status}" >
    <f:selectItems value="#{Status}" var="statusEnum" 
        itemValue="#{statusEnum}" itemLabel="#{statusEnum.label}"/>
</p:selectOneMenu>

根据我链接的问题,应显示包含枚举值和 label 字符串的下拉列表。然而,事实并非如此。

使用 itemLabel 时,我收到一条错误消息,指出“标签”不是有效的枚举值。 缩写的堆栈跟踪:

java.lang.NumberFormatException: For input string: "label"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at java.lang.Integer.parseInt(Integer.java:615)
    at javax.el.ArrayELResolver.coerce(ArrayELResolver.java:144)
    at javax.el.ArrayELResolver.getValue(ArrayELResolver.java:61)
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:169)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:190)
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
    at javax.faces.component.UIComponentBase$AttributesMap.get(UIComponentBase.java:2427)
    at org.primefaces.renderkit.SelectRenderer.createSelectItem(SelectRenderer.java:161)
    at org.primefaces.renderkit.SelectRenderer.getSelectItems(SelectRenderer.java:114)

当删除“itemLabel”时,我收到另一个错误:

javax.faces.convert.ConverterException: Status: ''[Lpackage.name.Status;@42b3ca25'' must be convertible to an enum.
    at javax.faces.convert.EnumConverter.getAsstring(EnumConverter.java:219)
    at org.primefaces.renderkit.SelectRenderer.getoptionAsstring(SelectRenderer.java:203)
    at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeOption(SelectOneMenuRenderer.java:591)
    at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeselectItems(SelectOneMenuRenderer.java:554)
    at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeHiddenSelect(SelectOneMenuRenderer.java:241)
    at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.encodeInput(SelectOneMenuRenderer.java:207)

我调试了这个错误,发现除了 3 个枚举值之外,它还尝试添加第 4 个值。第 4 个值是“ALL_VALUES”数组。

在上一次测试中,我刚刚将 <p:selectOneMenu> 更改为 <h:selectOneMenu>,现在它确实可以工作了。它仍然添加了一个 ALL_VALUES 选择选项,但它不应该这样做。

任何帮助都可以得到一个只包含枚举值的下拉列表,最好还有正确的标签。

谢谢

解决方法

从 Primefaces importEnum 组件导入的枚举列表由 ImportEnumTagHandler 类管理。
正如您在 getEnumValues 函数中看到的,它迭代枚举常量 每种类型,然后在地图中添加另一个值,以及每种类型的列表,使用 xhtml 中指定的后缀(默认值为 ALL_VALUES)。
因此,如果您只有一个枚举并且没有指定任何后缀,则可以像这样为 selectItems 使用枚举:

<p:importEnum type="package.Status" />
<p:outputLabel for="statusDropdown" value="Status:" />
<p:selectOneMenu id="statusDropdown" value="#{bean}">
    <f:selectItems value="#{Status.ALL_VALUES}"
        itemLabel="#{element.label}" itemValue="#{element}" var="element" />
</p:selectOneMenu>

Import enum docs

ajax – a4j:support – 从h检索的值:selectOneMenu始终为NULL

ajax – a4j:support – 从h检索的值:selectOneMenu始终为NULL

每行都有一个带h:selectOneMenu的数据表.我希望能够检索bean中selectOneMenu中选择的值.我正在使用richfaces a4j:support标签来对辅助bean进行 AJAX调用.你可以看到下面的代码:

DataTable标头:

<t:dataTable id="datatable" var="row" value="#{myBean.dataTableRows}">

SelectOneMenu with A4j:

<h:selectOneMenu id="type" label="Type:" stylevalue="#{datatableHolder.selectedValue}" converter="comboConverter" immediate="true" >                           
  <f:selectItem itemValue="#{null}" itemLabel="" />
  <t:selectItems var="tp" 
    itemValue="#{tp}" itemLabel="#{tp.nome}"
        value="#{row.comboTypeValues}"  />
   <f:attribute name="row" value="#{row}"/>                                                         
   <a4j:support event="onchange" reRender="parent" actionListener="${myBean.executeAjax}" immediate="true" ajaxSingle="true" />
</h:selectOneMenu>

要执行的backing Bean方法:

public void executeAjax(ActionEvent event){

    ValueHolder comboBox = (ValueHolder) event.getComponent().getParent();      
    comboBox .getValue();

}

> comboBox .getValue()返回NULL,即使我选择了一个值.

PS:

这个问题已被确定为this question的可能重复,但事实并非如此.我的问题使用dataTable并且不对每个元素使用绑定.另外,我使用的是JSF 1.1和RichFaces 3.3.3.

解决方法

确定了问题:

由t:selectItems标记生成的每个“选项”都使用项目ID而不是索引,而comboConverter使用索引来选择项目.因此,列表有12个项目(索引的范围应为0到11),但所选项目的ID为22.然后转换器将遍历列表到索引22并检索该元素.但是这个列表中没有这样的索引,因为最大值是12,然后转换器将始终返回NULL.

对于这个问题,基本上有3种方法可以解决:

>创建一个新的转换器,通过它的id查找该项目
>调整/更改“comboConverter”以通过它的id查找项目(这样做会影响使用此转换器的其他代码段
>调整列表以使用索引而不是ID

由于系统中的轻微影响,我选择了第一个.

ajax – 如何在selectOneMenu中将值传递给Listener

ajax – 如何在selectOneMenu中将值传递给Listener

我有2个下拉菜单:Type&码.如果值= A或B或C,我希望代码下拉列表根据类型下拉列表更改值.如何将A或B或C的值传递给侦听器,以便它可以理解和处理我的列表?

<h:outputLabel value="Type" for="idType" />
     <h:selectOneMenu id="idType" value="#{myController.type}">
         <f:selectItem itemLabel="AAA" itemValue="AAA" />
         <f:selectItem itemLabel="BBB" itemValue="BBB" />
         <f:selectItem itemLabel="CCC" itemValue="CCC" />
         <f:ajax event="valueChange" listener="#{myController.changeCodeList}" render="idCode" execute="@this" />
     </h:selectOneMenu>
     <h:outputLabel value="Code" for="idCode" />
     <h:selectOneMenu id="idCode" value="#{myController.code}" >
         <f:selectItem itemLabel="Select ..." noSelectionoption="true" />
         <f:selectItems value="#{myController.codeList}" />
     </h:selectOneMenu>

解决方法

从< f:ajax中删除event =“valueChange”或将其替换为event =“change” 您不必将值传递给已经存在的值(在changeCodeList方法中)

public void changeCodeList(AjaxBehaviorEvent ev) {
    System.out.println(type); //here is your value
    //Now repopulate your list based on the value
    codeList = someMethod(type);
}

今天关于selectOneMenu的第二个粗体项的分享就到这里,希望大家有所收获,若想了解更多关于'UnexpectedTagNameException' and Element should have been “select” but was“div” error using 'Select' function through Selenium java、 的 PrimeFaces 、ajax – a4j:support – 从h检索的值:selectOneMenu始终为NULL、ajax – 如何在selectOneMenu中将值传递给Listener等相关知识,可以在本站进行查询。

本文标签: