2013-08-13 2 views
2

Я хотел бы знать, можно ли нажать значение изнутри <ui:repeat> на карту, набор или список?Как установить представленные значения <h:inputText> внутри <ui:repeat> на карту, установить или указать

Я хотел бы передать значение <h:inputtext> в комплект.

Код:

<ui:repeat var="_par" value="#{cmsFilterParameterHandler.normaleSuchParameter()}"> 

     <p:outputLabel value="#{_par.bezeichnung}" /> 
     <p:spacer width="5px" /> 
     <p:inputText id="me" value="#{??? push me to a set ???}"/> 
     <br /><br /> 

</ui:repeat> 

ответ

0

ли вы имеете в виду, как это?

<p:inputText id="me" value="#{_par.input}"/> 

в BackBean:

public class Par implements Serializable { 

private String inputText; 
private String bezeichnung; 

public Par() 
{ 
} 

public void setInput(String input) 
{ 
this.inputText = input; 
} 

public String getInput() 
{ 
return this.inputText 
} 

public void setBezeichnung(String bezeichnung) 
{ 
this.bezeichnung = bezeichnung; 
} 

public String getBezeichnung() 
{ 
return this.bezeichnung 
} 

} 
+0

Привет, проблема в том, что делать, если в переменной _par имеется более одного элемента? Поэтому мне нужно что-то вроде набора или списка. То, что вы описываете, хранит только одно строковое значение. (или я не понимаю вас?) – LStrike

+0

Теперь посмотрите на мой пример, если _par - это объект. Это будет работать –

+0

ОК, это действительно вариант. Но для этого мне пришлось бы сделать поле inputText сохранено в моей базе данных. Он не будет работать с переходным объектом. В этом случае _par - это только список строковых значений (например, ключ для карты), inputText должен быть неизменным значением для поиска документа. Любые идеи для этого. Если нет, мне нужно разобраться в обходном пути. – LStrike

1

Я не уверен, если я правильно понял ваши требования. Я предполагаю следующее: вам нужен список строк в некоторых backend и тег ui:repeat, чтобы перебирать эти строки с полями ввода для их редактирования. Может быть, есть некоторые синтаксических вопросы, но моя идея должна быть ясна:

public class Backend { 
    private List<String> myStrings; 

    public MyStringWrapper getMyStringWrapper(int index) { 
     return new MyStringWrapper(index); 
    } 

    public class MyStringWrapper { 
     private final int index; 
     public MyStringWrapper(int index) { this.index = index; } 
     public String getContent() { return myStrings.get(index); } 
     public void setContent(String newContent) { myStrings.add(index, newContent); } 
    } 
} 

В интерфейсе вы используете следующим образом:

<ui:repeat var="_index" value="#{backend.getIndexSequence()}"> 
    <p:inputText value="#{backend.getMyStringWrapper(_index).content}"/> 
</ui:repeat> 

Конечно, вы должны предоставить getIndexSequence-метод, который производит список целых чисел от 0 до размера строк.

+0

Хотя это может сработать, это ужасно неуклюжий подход. – BalusC

+0

Хорошо, сталкиваясь с тем фактом, что я использую JSF 1.2 (как было обнаружено в обсуждении выше - извините, что я не упоминал об этом), неужели это неуклюжий подход? Мне нужны методы getter- и setter без дополнительного аргумента. Итак, как это можно улучшить для JSF 1.x? Thanks – MrD

3

С Set это невозможно, так как оно не позволяет ссылаться на элементы по индексу или ключу. Однако возможно с List и Map, просто указав индекс индекса и карту в значение ввода.


С List:

private List<String> list; // +getter (no setter necessary) 

@PostConstruct 
public void init() { 
    list = createAndFillItSomehow(); 
} 
<ui:repeat value="#{bean.list}" varStatus="loop"> 
    <h:inputText value="#{bean.list[loop.index]}" /> 
</ui:repeat> 

С Map (только если среда supports EL 2.2 or JBoss EL):

private Map<String, String> map; // +getter (no setter necessary) 

@PostConstruct 
public void init() { 
    map = createAndFillItSomehow(); 
} 
<ui:repeat value="#{bean.map.entrySet().toArray()}" var="entry"> 
    <h:inputText value="#{bean.map[entry.key]}" /> 
</ui:repeat> 

Следует отметить, что канонический подход состоит в использовании List полноправных javabeans. Давайте предположим, что в бина класс с именем Par со свойствами id и value отображающая именно к par таблице в БД с колоннами id и value:

private List<Par> pars; // +getter (no setter necessary) 

@PostConstruct 
public void init() { 
    pars = createAndFillItSomehow(); 
} 
<ui:repeat value="#{bean.pars}" var="par"> 
    <h:inputText value="#{par.value}" /> 
</ui:repeat> 

В любом случае, он работает так же хорошо при использовании <p:inputText> , это никоим образом не связано с PrimeFaces, в контексте этого вопроса речь идет только о библиотеке компонентов JSF UI, основанной на jQuery. Просто замените h: на p:, чтобы включить его.

+0

Можно ли записать значение в 'inputText' и как это значение будет записано в резервную' List' (в первом случае)? Я думаю, что без явного «чистого» getter и setter (clean = без дополнительных аргументов) это не работает, не так ли? – MrD

+0

У меня нет абсолютно никакого представления о том, что вы имели в виду «написать значение в' inputText' ». Вы хотите, чтобы вы сохранили/предварительно заполнили некоторые значения по умолчанию? Просто выполните работу в 'createAndFillItSomehow()' соответственно. Создайте 'new ArrayList <>()'. Задайте в нем нужные элементы, которые могут быть «пустым» для пустого ввода или '' foo '' для ввода с «foo», предварительно заполненным. – BalusC

+0

Или, вы имеете в виду обновление значений модели? JSF как MVC framrework уже делает это автоматически. В методе действия командной строки/кнопки просто используйте 'list' или' map' обычным способом. Представленные значения уже обновлены. Думайте логически, этот ответ в противном случае не имел бы никакого смысла. – BalusC

 Смежные вопросы

  • Нет связанных вопросов^_^