0

検索フィールドに入力するすべてのデータがnull値でJavaコードに渡されるため、検索フォームに少し問題があります。jsf2は初めてです。

これは私のxhtmlページで、次の形式です。

<h:form>
    <ul>
        <li>
            <h:outputLabel for="equipmentName" value="#{bundle.NomeEquipamento_Title}"/>
            <h:inputText value="#{materialController.selected.equipmentName}" class="w_130" id="equipmentName" required="false" validatorMessage="#{bundle.NomeEquipamento_Title} inválido."/>
        </li>
        <li>
            <h:outputLabel for="channelCode" value="#{bundle.CodigoCanal_Title}"/>
            <h:inputText value="#{materialController.selected.channelCode}" class="w_80" id="channelCode" required="false" validatorMessage="#{bundle.CodigoCanal_Title} inválido."/>
        </li>
        <li><h:commandButton type="reset" class="bt_limpar button29" style="margin-top:13px;"><span class="screen_reader_text">Limpar</span></h:commandButton></li>
        <li><h:commandLink action="#{materialController.pesquisa}" class="bt_pesquisar button29" style="margin-top:13px;" immediate="true"><span class="screen_reader_text">Pesquisar</span></h:commandLink></li>
    </ul>
</h:form>

これは、「equipmentName」と「channelCode」の2つの属性を持つ私のDTOです。

public class SearchCommercialsDTO implements Serializable{

    private String equipmentName;
    private Integer channelCode;

   /**
    * Default constructor
    */
    public SearchCommercialsDTO() {}

    /**
     * Constructor
     * @param equipmentName
     * @param channelCode 
     */
    public SearchCommercialsDTO(String equipmentName, Integer channelCode) {
        this.equipmentName = equipmentName;
        this.channelCode = channelCode;
    }
    public String getEquipmentName() {
        return equipmentName;
    }

    public void setEquipmentName(String equipmentName) {
        this.equipmentName = equipmentName;
    }

    public Integer getChannelCode() {
        return channelCode;
    }

    public void setChannelCode(Integer channelCode) {
        this.channelCode = channelCode;
    }
}

そしてこれは私のmanadgedbeanです:

@ManagedBean(name = "materialController")
@SessionScoped
public class MaterialController implements Serializable {

    private SearchCommercialsDTO current;
    private int selectedItemIndex;

    public MaterialController() {
    }

    public SearchCommercialsDTO getSelected() {
        if (current == null) {
            current = new SearchCommercialsDTO();
            selectedItemIndex = -1;
        }
        return current;
    }

    public String pesquisa() {
        try{
            getFacade().find(current);
            JsfHelper.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("PesquisaRealizada"));
            return preparaPesquisa();
        } catch (Exception e) {
            JsfHelper.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
            return null;
        }
    }
}

「Pesquisar」ボタンをクリックすると投稿が行われますが、「SearchCommercialsDTO」属性「current」は、入力テキストフィールドに何かを入力しても、すべての属性値「null」で渡されます。

私のコードには何が欠けていますか?

ありがとう!

4

2 に答える 2

0

commandLink から immediate="true" を削除してみてください

于 2013-03-15T13:50:56.397 に答える
0

変更してみてくださいgetSelectedMethod()

に属性selectedを追加ManagedBean

private SearchCommercialsDTO selected;
// getter and setter for selected attribute

実際のgetSelectedMethod()ボディを移動actionListener

public void getSelectedActionListener(ActionEvent e) {
    if (current == null) {
        current = new SearchCommercialsDTO();
        selectedItemIndex = -1;
    }
}

このコードをビューに追加します

<h:commandLink action="#{materialController.pesquisa}" actionListener="#{materialController.selectedActionListener}" ...>...</h:commandLink></li>

これらの変更の後、 のactionListener前に起動されactionます。

于 2013-03-15T13:47:24.917 に答える